pythonを書いていると幾度となく目にするエラー、”ModuleNotFoundError: No module named ***”の原因と対処法についてまとめます。
多くの場合、***に当たる名前のライブラリをpipインストールすることで解決します。
Contents
原因
このエラーは、importしようとしたmoduleが存在しないときに発生します。
moduleとは、”***.py”という名前のファイルを指します。
moduleが存在しない原因としては様々な理由が考えられますが、この記事では考えられうる4つの事例についての対処法を紹介します。
対処法
module名を間違えている場合
>>> import nupmy Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named 'nupmy'
最初に確認するべきはmodule名の間違いです。
pythonでよく用いるライブラリとしてnumpyがありますが、「nupmy」のような文字入れ替えタイポは案外気づきません。
もう一度確認してみましょう!
ライブラリが無い場合
>>> import pydrive Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named 'pydrive'
次に、importしようとしたライブラリが存在しないというケースがあります。
これは冒頭でも紹介した、「よくある原因」です。
上の例では、Google Driveをpythonから使えるPyDriveというライブラリをimportしようとし、エラーが出ています。
この原因によるエラーなら、該当ライブラリをインストールすることで解決することができます。
多くの場合、pip installによってライブラリをインストールすることができます。
$ pip install pydrive
自分で作ったファイルが読み込めない時
自分で作ったtest.pyなどをimportしようとしてエラーが出ている場合は、pythonを実行しているフォルダ内にtest.pyが存在するかを確認してください。
# 以下のようなフォルダ構成 src - run.py - hoge -- test.py # run.pyで以下のようにtest.pyをimportする import test.py
例えばこのような構成でsrcフォルダ内からrun.pyを実行しても、testをimportすることはできません。
この場合はrun.pyでのimportを以下のように書き替える必要があります。
import hoge.test
また、srcフォルダよりも高い場所で以下のようにrun.pyを実行した場合も、同様のエラーが出ます。
$ python src/run.py
これが結構盲点で、ハマったことがある方も多いのではないでしょうか。
実行する場合は、必ずrun.pyが存在するフォルダ内まで移動しましょう。
もしフォルダ外から実行したい場合は、各ファイルのimport文前に、以下を記述しておく必要があります。
import sys sys.path.append('/path/to/dir')
ここで’/path/to/dir’にtest.pyまでの絶対パスを指定することで、どこから実行してもtest.pyをimportできるようになります。
ライブラリが要求するライブラリが無い場合
最後に厄介な例をご紹介します。
あるパッケージが、内部でまた別のパッケージを要求するときに、同様のエラーが出ることがあります。
例えばchainerというパッケージはnumpyというパッケージを内部で呼び出します。
何らかの理由でnumpyだけがアンインストールされた後に、import chainerしてしまうと、”ModuleNotFoundError: No module named numpy”が発生します。
この場合も、pip installによって要求されているライブラリをインストールすることで解決することができます。
pythonを学べる教科書
初めてプログラミングの勉強をする場合、インターネットだけを見て独学することは非常に難しいと思います。
インターネットに存在する情報は体型だてられておらず、学習に向いているとは言えないためです。
着実な学習のためには、やはり学習のために用意された入門書に頼るのが一番です。
以下の記事ではやさしいpythonの入門書についてレビューを掲載していますので、是非参考にしてみて下さい!