github Actions で、自動試験を workflow で記載してる時にModuleNotFoundError: No module named でなかなか前に進めなかった時の備忘録。
ちょっとディレクリ構成が複雑で
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
target/ ├── src/ │ ├── xxxx.py │ └── yyyy.py ├── resources/ │ └── setting.yml ├── others/ │ └── test_zzzz.py └── tests/ ├── test_xxxx.py ├── unit_utils.py └── resources/ └── setting.yml |
project がソースディレクトリで、others には自動試験には不要な試験が。
また、testsの中では、tests内部で参照される unit_utils.pyがあって。
あと、ソース内では、設定ファイルが本番と試験で参照箇所が違っていて、ソース内部からは相対パスで見てます。
なので、target ディレクトリ
1 2 3 |
poetrty run pytest |
とすると、ModuleNotFoundError が出る。さらに、unit_utils.py もうまく参照できない。
とありあえず正解は、
1 2 3 4 5 6 7 8 |
- name: Set env run: echo "PYTHONPATH=../src" >> $GITHUB_ENV - name: Run test run: | cd tests poetry run python -m pytest |
Set env で、 PYTHONPATH に srcディレクトリを追加。(cd で後で移動するので一つ上の階層)
試験実行時には、tests ディレクトリに移動。これにより、othersにある試験を無視。
poetry run python -m pytest で実行する。