Python インポートを扱う場合、兄弟パッケージのインポートの問題が発生するとイライラすることがあります。この問題を解決するために、恐ろしい sys.path.insert ハックの代替案を検討してみましょう。
次のプロジェクト構造を検討してください:
├── LICENSE.md ├── README.md ├── api │ ├── __init__.py │ ├── api.py │ └── api_key.py ├── examples │ ├── __init__.py │ ├── example_one.py │ └── example_two.py └── tests │ ├── __init__.py │ └── test_one.py
サンプルおよびテスト ディレクトリ内の API モジュールからインポートしようとすると、次のようなエラーが発生する場合があります。
ModuleNotFoundError: No module named 'api'
sys.path ハックに頼る代わりに、次のようにします。 Python のソリューション:
ステップ 1: pyproject.toml ファイルを作成します
[project] name = "myproject" version = "0.1.0" description = "My small project" [build-system] requires = ["flit_core >=3.2,<4"] build-backend = "flit_core.buildapi"</p> <p><strong>ステップ 2: pip -e を使用してインストールします</strong></p> <p>必要に応じて仮想環境をアクティブ化し、プロジェクトを編集可能にインストールしますstate:</p> <pre class="brush:php;toolbar:false">pip install -e .
ステップ 3: インポートを調整する
これまで API モジュールからインポートできなかったファイルのインポートを変更して、プロジェクト名を含めます。例:
from myproject.api.api import function_from_api
a pi.py
def function_from_api(): return 'I am the return value from api.api!'
test_one.py
from myproject.api.api import function_from_api def test_function(): print(function_from_api()) if __name__ == '__main__': test_function()
実行中テスト
まだ仮想環境内にいることを確認し、次を実行します:
python .\myproject\tests\test_one.py
出力:
I am the return value from api.api!
以上がPython で兄弟パッケージをインポートするときに「sys.path」ハックを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。