私はこのようなフォルダ構造を持っています
App
--App
--app.py
--Docs
--Tests
--test_app.py
私のtest_app.py file
、アプリモジュールをインポートする行があります。ルートフォルダーでpy.testを実行すると、appというモジュールがないというエラーが表示されます。これをどのように設定すればよいですか?
したがって、py.test
から/App
を実行しています。 /App/App
は$PYTHONPATH
にありますか?
そうでない場合、import app
を試みるコードはそのようなメッセージで失敗します。
EDIT0:完全を期すために、以下のコメントからの情報を含めます。
アプリのインポートは、/App/App
内で実行された場合にのみ成功しますが、ここではそうではありません。 /App/App
をその中に入れて__init__.py
をパッケージにし、アプリをfrom App import app
として修飾するようにインポートを変更します。
EDIT1:リクエストにより、以下の2番目のコメントからさらに説明を追加します。
__init__.py
を/App/App
の中に置くことにより、そのディレクトリがパッケージになります。つまり、ディレクトリ-が$PYTHONPATH
に表示されている限り、そこからインポートできます。つまりApp import app
が/App
にある場合、$PYTHONPATH
から実行できます。現在の作業ディレクトリは$PYTHONPATH
に自動的に追加されるため、/App
からスクリプトを実行するとインポートが機能します。
Python 3を使用し、同様のプロジェクトレイアウトで同じエラーが発生した場合、__init__
ファイルをtests
モジュールに追加します。
$ touch tests/__init__.py
私はパッケージ化とインポートが得意ではありませんが、これはpytest
がターゲットApp
モジュールがある場所を見つけるのに役立つと思います。
すでに__init__.py
ファイルの/App/App
ディレクトリを使用し、パスをマングルするマジックなしでプロジェクトルートからテストを実行したい:
python -m pytest tests
出力はすぐに次のようになります。
➟ python -m pytest tests
====================================== test session starts ======================================
platform linux -- Python 3.5.1, pytest-2.9.0, py-1.4.31, pluggy-0.3.1
rootdir: /home/andrew/code/app, inifile:
plugins: teamcity-messages-1.17
collected 46 items
... lines omitted ...
============================= 44 passed, 2 skipped in 1.61 seconds ==============================
以下の場所にあるアプリのテストケースを実行しているときにも同じエラーが発生しました
myproject
--app1
--__init.py__
--test.py
--app2
--__init.py__
--test.py
--__init.py__
myproject's__ init.py __ファイルとブームを削除しました。テストケースは現在実行中です。