ホームページ > バックエンド開発 > Python チュートリアル > 階層プロジェクト構造で pytest を使用するときに発生する「ImportError: No Module Named...」エラーを修正するにはどうすればよいですか?

階層プロジェクト構造で pytest を使用するときに発生する「ImportError: No Module Named...」エラーを修正するにはどうすればよいですか?

DDD
リリース: 2024-12-01 09:31:14
オリジナル
865 人が閲覧しました

How Can I Fix

モジュールのインポート エラーによる pytest の PATH の問題の解決

pytest を使用して階層ファイル構造を持つプロジェクトでテストを実行する場合、次のことが考えられます。アプリケーションのパスからモジュールをインポートするときに、「ImportError: No module names ...」エラーが発生します。この問題は、sys.path を変更して必要なモジュールへのパスを含める必要があるために発生します。

pytest の推奨アプローチ >= 7: pythonpath 設定

pytest バージョン 7 以降では、pythonpath 構成値を使用した簡素化されたソリューションが提供されます。これにより、回避策を必要とせずに、特定のパスを sys.path に追加できます。構成ファイル (pyproject.toml または pytest.ini) では、次のように含めるパスを指定できます。

[tool.pytest.ini_options]
pythonpath = [
  "."
]
ログイン後にコピー
[pytest]
pythonpath = .
ログイン後にコピー

pytest の元の回答 < 7: conftest ソリューション

古いバージョン (7 未満) の pytest を使用している場合は、空の conftest.py ソリューションを使用できます。これには、プロジェクトのルート ディレクトリに空の conftest.py ファイルを作成することが含まれます。これにより、pytest が conftest.py ファイルの親ディレクトリを sys.path に自動的に追加し、インポートの問題が解決されます。

説明

Pytest は、実行中に conftest モジュールをスキャンします。カスタム フックとフィクスチャを収集するためのテスト コレクション。これらのモジュールからカスタム オブジェクトをインポートするために、pytest は conftest.py の親ディレクトリを sys.path に追加します。

代替解決策

状況に応じて、この問題に対する追加の解決策が存在します。プロジェクト構造:

  • パッケージ ルートディレクトリ: conftest.py ファイルをパッケージのルート ディレクトリに配置します。このディレクトリにはサブパッケージが含まれていますが、パッケージ自体ではありません (__init__.py ファイルはありません)。
  • src レイアウト: src レイアウトで使用することは可能ですが、conftest.py を src ディレクトリに配置すると、src レイアウトの利点が無効になる可能性があります。代わりに、パッケージのルート ディレクトリに配置することを検討してください。

結論

sys.path を調整するか、conftest.py ソリューションを使用することで、問題を解決できます。 「ImportError: No module names ...」エラーを解決し、pytest 環境でテストが正常に実行されることを確認します。

以上が階層プロジェクト構造で pytest を使用するときに発生する「ImportError: No Module Named...」エラーを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート