「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Python で共有モジュール用の名前空間パッケージを作成する方法

Python で共有モジュール用の名前空間パッケージを作成する方法

2024 年 11 月 8 日に公開
ブラウズ:246

How to Create Namespace Packages in Python for Shared Modules?

共有モジュール配布用の Python での名前空間パッケージの作成

はじめに

Python では、名前空間パッケージは関連モジュールを配布するための便利なアプローチです。これにより、複数の Python 製品が同じ名前空間内でモジュールを定義できるようになり、エンドユーザーがそれらをシームレスにインポートできるようになります。

名前空間パッケージの実装

Python 3.3 の暗黙的な名前空間パッケージ

Python 3.3 以降、暗黙的な名前空間パッケージの概念が導入されました。これにより、名前空間パッケージ ディレクトリ内に明示的な __init__.py ファイルが必要なくなります。インポートするシステムは、__init__.py ファイルのないディレクトリの sys.path を自動的に検索し、それらを名前空間パッケージとして初期化します。

Python 3.3 以前の解決策

3.3 より前の Python バージョンの場合、pkgutil.extend_path () メソッドを利用して、明示的な名前空間パッケージを定義できます:

from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

この行は、検索パスで見つかった通常のパッケージを名前空間パッケージの path 属性に追加します。

通常と名前空間の使用パッケージの統合

通常のパッケージと名前空間パッケージの両方が共存するシナリオでは、前述の extend_path() メソッドが以下を含むように拡張されました。暗黙的な名前空間パッケージ。これにより、次のようなディレクトリ構造が可能になります:

├── path1
│   └── package
│       ├── __init__.py
│       └── foo.py
├── path2
│   └── package
│       └── bar.py
└── path3
    └── package
        ├── __init__.py
        └── baz.py

extend_path() を使用する __init__.py ファイルでは、import package.foo、import package.bar、および import package.baz はすべて期待どおりに機能します。

pkg_resources .declare_namespace()

pkgutil.extend_path() とは対照的に、 pkg_resources.declare_namespace() 関数は、暗黙的な名前空間パッケージをサポートするように更新されていません。したがって、pkgutil ソリューションを使用することをお勧めします。

リリースステートメント この記事は次の場所に転載されています: 1729575676 権利侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3