93
65

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

#あらまし
インストールしたはずのモジュールが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とか神なんだけど、それだけ触っても出来ない事もそれなりにあるよねと。

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

93
65
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
93
65

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?