ホームページ >バックエンド開発 >Python チュートリアル >「sys.path」ハックを使用せずに、Python で兄弟パッケージを効果的にインポートするにはどうすればよいですか?

「sys.path」ハックを使用せずに、Python で兄弟パッケージを効果的にインポートするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-14 15:54:11469ブラウズ

How Can I Effectively Import Sibling Packages in Python Without Using `sys.path` Hacks?

兄弟パッケージのインポート

概要

兄弟パッケージを統合し、さまざまなディレクトリからスクリプトを実行することは、困難な場合があります。このガイドでは、悪名高い sys.path ハッキングを回避する詳細なソリューションを紹介します。

セットアップ

次のディレクトリ構造を検討してください:

├── 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

ソリューション

ステップ 1: pyproject.toml を作成するファイル

ルート ディレクトリに、次の最小限の内容を含む pyproject.toml ファイルを作成します。

[project]
name = "myproject"
version = "0.1.0"
description = "My small project"

[build-system]
build-backend = "flit_core.buildapi"
requires = ["flit_core >=3.2,<4"]

ステップ 2: 仮想環境を使用する (推奨)

分離と依存関係のための仮想環境を作成してアクティブ化する

ステップ 3: プロジェクトをインストールします

pip を使用してプロジェクトを編集可能な状態でインストールします:

pip install -e .

ステップ 4:私のプロジェクトを追加します。 Prefix

相対インポートまたは絶対インポートが失敗するインポートでは、インポート ステートメントに myproject 接頭辞を追加します:

from myproject.api.api import function_from_api

コード例

api.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()

テストの実行

tests ディレクトリに移動して実行します。 test_one.py:

python .\myproject\tests\test_one.py

結論

このソリューションは、sys.path を操作せずに兄弟パッケージをインポートするクリーンでポータブルな方法を提供します。 pyproject.toml を利用し、プロジェクトを編集可能にインストールすると、スクリプトへの変更がインストールされたパッケージに自動的に反映されるようになります。このアプローチにより、開発が合理化され、プロジェクト管理が簡素化されます。

以上が「sys.path」ハックを使用せずに、Python で兄弟パッケージを効果的にインポートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。