【pytest】E ModuleNotFoundError: No module named 'src'
Pythonのモジュール解決周りは難解ですね・・・
- Python 3.8.3
- Poerty 1.1.4
- pytest 6.1.2
$ poetry run pytest ./src ./tests ImportError while importing test module 'project_dir/tests/foo/test_bar.py'. Hint: make sure your test modules/packages have valid Python names. # 省略 E ModuleNotFoundError: No module named 'src'
project_dir ├ src │ └ foo │ └ bar.py └ tests └ foo └ test_bar.py # ここでエラー
# project_dir/src/tests/foo/test_bar.py from src.foo.bar import Bar # 以下省略
この from src...
の src
が見つけられないようです。
原因ですが、pytestはデフォルトで test*
を満たすファイル名を探して実行しようとします。
そのため test*
の名前のファイルが1つもない src
下をロードできていないのではないかと考えました。
解決策として、 src
ディレクトリ直下に test*
を満たす適当なファイルを作成します。
今回は test_init.py
としました。
pytestにロードさえしてもらえれば良いのでファイルの中身は空です。
project_dir ├ src │ ├ test_init.py # 空ファイルを追加 │ └ foo │ └ bar.py └ tests └ foo └ test_bar.py # ここでエラー
そうするとちゃんと src
を読んでもらえるようになりました。