Python では、名前空間パッケージは関連モジュールを配布するための便利なアプローチです。これにより、複数の Python 製品が同じ名前空間内でモジュールを定義できるようになり、エンドユーザーがそれらをシームレスにインポートできるようになります。
Python 3.3 以降、暗黙的な名前空間パッケージの概念が導入されました。これにより、名前空間パッケージ ディレクトリ内に明示的な __init__.py ファイルが必要なくなります。インポートするシステムは、__init__.py ファイルのないディレクトリの sys.path を自動的に検索し、それらを名前空間パッケージとして初期化します。
3.3 より前の Python バージョンの場合、pkgutil.extend_path () メソッドを利用して、明示的な名前空間パッケージを定義できます:
<code class="python">from pkgutil import extend_path __path__ = extend_path(__path__, __name__)</code>
この行は、検索パスで見つかった通常のパッケージを名前空間パッケージの 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 はすべて期待どおりに機能します。
pkgutil.extend_path() とは対照的に、pkg_resources.declare_namespace() 関数は、暗黙的な名前空間パッケージをサポートするように更新されていません。したがって、pkgutil ソリューションを使用することをお勧めします。
以上がPython で共有モジュール用の名前空間パッケージを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。