結果
結論的には実行対象の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
(上記配列の先頭)にしていたため、フォルダの中が散策されそこに実際のファイルが存在しなかったため、そのタイミングでエラーが返されるようになっていた。
参考にした記事