pytest を使用すると、パスの問題により ImportError 例外が発生することがよくあります。これは、オペレーティング システムやプロジェクト構造が異なる場合に特によく発生する可能性があります。この問題に対処し、考えられる解決策を検討してみましょう。
パスの問題に対処する効果的な方法の 1 つは、conftest.py ファイルを利用することです。 Pytest は、テスト収集中に conftest モジュールを検索して、カスタム フックとフィクスチャを収集します。空の conftest.py ファイルをプロジェクトのルート ディレクトリ (pytest を実行する場所) に配置すると、pytest は自動的に親ディレクトリを sys.path に追加し、アプリケーション モジュールをインポートできるようにします。
次のようなプロジェクト構造の場合:
repo/ |--app.py |--settings.py |--models.py |--tests/ |--test_app.py
単に空の conftest.py ファイルをrepo/ directory.
pytest の最新バージョン (7 以降) の場合、より便利な解決策は pythonpath 設定を利用することです。これにより、pytest 設定を通じて sys.path を直接変更できるようになります。 pyproject.toml または pytest.ini ファイルに次の行を追加します:
[tool.pytest.ini_options] pythonpath = ["."]
これは、カスタム コードや sys.path の操作を必要としない、よりクリーンなアプローチです。
プロジェクト構造: conftest.py ファイルの配置を調整するか、プロジェクト構造に基づいた pythonpath 構成。たとえば、一般的な src ベースのレイアウトでは、ルートではなく src ディレクトリに conftest.py を配置します。
src レイアウト: src を PYTHONPATH に追加するときは注意してください。インストールされたパッケージではなくリポジトリ コードをテストすることになるため、src レイアウトを使用する利点が損なわれる可能性があります。
以上がパスの問題による pytest の「ImportError: No module names...」問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。