0
0

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 1 year has passed since last update.

PythonのModuleNotFoundErrorにがっつりハマった話しと解決した方法

Last updated at Posted at 2021-09-30

結果

結論的には実行対象のpythonのフォルダ名称とpythonファイル自体の名称がライブラリ名称とかぶっていたためそれらを読み込みにいってエラーが発生していた。

教訓
ライブラリ名と同じフォルダ名やファイル名を使ってはいけない

事象

普段Pythonそんなに触らないマンが久々にPythonでスクリプト書きたくなったのでPoetryを使って開発を始めた。
とあるライブラリを試してみることが目的だったため、適当にフォルダ名と実行対象のファイル名を対象のライブラリの名称に命名した。

その後サンプルのコード持ってきてライブラリインポートして実行したが ModuleNotFoundError で実行自体ができなかった。

調査

ライブラリをどこを参照しにいっているかは以下のコマンドをファイル冒頭に書き足すことで確認が可能

ライブラリ読み込み先確認
import sys
import pprint

pprint.pprint(sys.path)

この文言を追記した上で実行すると以下のような配列が出力される。
(一部ユーザー名称など変換してます)

['/Users/username/.ghq/github.com/reponame/sandbox/python/abi/pyserum',
 '/usr/local/Cellar/python@3.9/3.9.7/Frameworks/Python.framework/Versions/3.9/lib/python39.zip',
 '/usr/local/Cellar/python@3.9/3.9.7/Frameworks/Python.framework/Versions/3.9/lib/python3.9',
 '/usr/local/Cellar/python@3.9/3.9.7/Frameworks/Python.framework/Versions/3.9/lib/python3.9/lib-dynload',
 '/Users/username/.ghq/github.com/reponame/sandbox/python/abi/pyserum/.venv/lib/python3.9/site-packages']

どうやらこれらが上から読み込まれていく仕様となっている様子。

実際に使おうとしたライブラリは pyserum という名称だった。

実際にimportしたファイルが入っていたのは一番最後のパスが正解

/Users/username/.ghq/github.com/reponame/sandbox/python/abi/pyserum/.venv/lib/python3.9/site-packages

しかし実行ファイルを配置していたフォルダ名自体も pyserum (上記配列の先頭)にしていたため、フォルダの中が散策されそこに実際のファイルが存在しなかったため、そのタイミングでエラーが返されるようになっていた。

参考にした記事

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?