現在、私はpyenv
特定のpython
バージョンをインストールして を使用しています。そして、 を使用して、pipenv
さまざまなプロジェクト用の仮想環境を作成しますpython
。
現在、次のようなプロジェクト構造になっています:
foo/
src/app.py
src/__init__.py
tests/unit/test_app.py
tests/unit/__init_.py
test_app.py
には、次のようにインポートするテストが任意の数ありますapp.py
。
import src.app
2つの問題があります:
- のようなコード エディターやは
emacs
、テストからのその句について文句を言い、それを赤でマークして「中程度に」迷惑な存在にします。vim
vscode
import
- テキスト エディターから
pipenv run pytest
テストをチェックするために呼び出します。src
検出できるモジュールではないため失敗します。プロジェクト ディレクトリのターミナルから同じコマンドを呼び出すと、同じエラーが発生します。
python
これをモジュールとして呼び出すとpipenv run python -m pytest
、現在のディレクトリが に追加されるため、機能します。PYTHONPATH
からエディターを起動すると、pipenv shell
テストも機能します。 エディターをどのように起動したかに関係なく、 はimport src.app
無効としてマークされます。
エディター設定を起動するとPYTHONPATH=$PYTHONPATH:.
テストも機能しますが、構文チェックではまだエラーが発生します。
emacs
やのようなエディタでこれを処理する最もクリーンな方法は何ですか?この問題を「自動的に」解決する や同様のツールvim
に移行したくありません。pycharm
答え1
pipenv
ドキュメントによると、呼び出された.env
ディレクトリ内のすべてのファイルがロードされます。pipenv
つまり、(たとえば)レイヤーを使用しているときにtest_app.py
を開いた場合、プロジェクトの が (通常どおり) 読み込まれますが、も自動的に読み込まれ、ファイルの内部依存関係が機能します。emacs
python
pipenv
.env
たとえば、.env
プロジェクトのルートに次のコンテンツを作成するとうまくいきます。
PYTHONPATH=$PYTHONPATH:.
emacs
これで、インポートの問題に直面することなく、ユニット テストを直接実行できるようになります。
これが私がこれを機能させる唯一の方法ですが、この解決策はハックっぽくて洗練されていないように感じます。