PYTHONPATH が更新されない

PYTHONPATH が更新されない

現在、私は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、テストからのその句について文句を言い、それを赤でマークして「中程度に」迷惑な存在にします。vimvscodeimport
  • テキスト エディターから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を開いた場合、プロジェクトの が (通常どおり) 読み込まれますが、も自動的に読み込まれ、ファイルの内部依存関係が機能します。emacspythonpipenv.env

たとえば、.envプロジェクトのルートに次のコンテンツを作成するとうまくいきます。

PYTHONPATH=$PYTHONPATH:.

emacsこれで、インポートの問題に直面することなく、ユニット テストを直接実行できるようになります。

これが私がこれを機能させる唯一の方法ですが、この解決策はハックっぽくて洗練されていないように感じます。

関連情報