Help us understand the problem. What is going on with this article?

python初心者がimportエラー(ModuleNotFoundError)で詰みかけた話

あらまし

インストールしたはずのモジュールがimport出来ない。
でもフォルダを見に行くと確かに存在している。
「何で読めへんねん!」をいったん解決できたのでまとめてみる。

pythonの本はたくさん読んでみたけれど、何故かこの手のエラーをちゃんと解説している本はまだ見ていない気がする。何でなんだ?初心者が一番躓く部分だと思うんだけど…。

知っておくと便利だった事(上から重要順)

1.pip show [module] … moduleの在り処を教えてくれる
2.pip install [moudle] と import [module] は必ずしも同一名ではない
3.sys.path … importが読みにいっているフォルダを教えてくれる
4.pprint … リストの整形

1.pip show [module]

モジュールがどこに存在しているか教えてくれる、(初心者にとっては)結構な神コマンド。
使い方:コマンドプロンプト開いて探したいモジュールを[module]に入れる。
例えばpandasの場合

pip show pandas

実行結果

C:\Users\xxxx>pip show pandas
Name: pandas
Version: 0.25.1
Summary: Powerful data structures for data analysis, time series, and statistics
Home-page: http://pandas.pydata.org
Author: None
Author-email: None
License: BSD
Location: c:\users\xxxx\appdata\local\programs\python\python37-32\lib\site-packages
Requires: python-dateutil, pytz, numpy
Required-by:

これでとりあえずLocationに存在していることだけは証明してくれる。
エラー原因が「存在していないから」ではなく、「存在しているけれど見つけられないから」ではないかと考えて、次へ進める。

2.pip install [moudle] と import [module] のmodule名は必ずしも同一名ではない

これ地味に何度もぶち当たってそのたびに困惑した。
例えばPyDriveをインストールする時は

pip install PyDrive

でいけるけど、それをimportしようとした時に

import PyDrive

ではいけなかった。ModuleNotFoundError: No module named 'PyDrive'を吐かれる。

正しい例は

from pydrive.auth import GoogleAuth

とか

from pydrive.drive import GoogleDrive

とすることだった。
これは「インストール時のモジュール名はインポート時にも使えて当然」と考えていたこちらの先入観に問題があった。使い方をろくに調べもせずに次に進んでしまう人は要注意。
(この手の記事って見かけないので、ハマったのって僕だけですか?)

3.sys.path

pythonがimport時にどこを見に行っているか教えてくれる(僕にとっては)神コマンド。
単体でも結構便利だけど、後述のpprintとの併用がオススメ。

import sys
sys.path

実行結果

['','C:\\Users\\xxxx\\Python\\Python37-32\\python37','C:\\Users\\xxxx\\Python\\Python37-32\\python37.zip','C:\\Users\\xxxx\\Python\\Python37-32\\Python37-32\\DLLs']

4.pprint

リストを整形して出力してくれる、目に優しいコマンド。
先ほどのsys.pathと一緒に使った場合。

import sys
import pprint
pprint.pprint(sys.path)

実行結果

['',
'C:\\Users\\xxxx\\Python\\Python37-32\\python37',
'C:\\Users\\xxxx\\Python\\Python37-32\\python37.zip',
'C:\\Users\\xxxx\\Python\\Python37-32\\Python37-32\\DLLs']

み、見やすい…。

あとがき

pythonをプログラム初心者にお勧めしている記事や本をちょくちょく見かけるけれど、僕は環境構築問題が結構な壁になるんではないかと思う。文法とか内容がお勧めっていうのはその通りだと思うんだけど、環境が構築出来なかったら文法もクソもなくないですか?
その点でcoraboratoryとか神なんだけど、それだけ触っても出来ない事もそれなりにあるよねと。

などと思いつつ、環境構築で躓いている人の参考になったらいいなぁと思ってまとめました。それでは。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした