ホームページ > バックエンド開発 > Python チュートリアル > Python で兄弟パッケージをインポートするときに「sys.path」ハックを回避するにはどうすればよいですか?

Python で兄弟パッケージをインポートするときに「sys.path」ハックを回避するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-11 13:56:10
オリジナル
134 人が閲覧しました

How Can I Avoid `sys.path` Hacks When Importing Sibling Packages in Python?

兄弟パッケージのインポート: 簡単なアプローチ

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'
ログイン後にコピー

解決策< /h2>

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 サイトの他の関連記事を参照してください。

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