distributed の Namespace Packagesから、名前空間パッケージを利用して、大きな Python パッケージをいくつかの小さなパッケージに分割できることがわかりました。本当にすごいです。ドキュメントには次のことも記載されています。
ところで、プロジェクトのソース ツリーには、通常の Python パッケージ レイアウトで名前空間パッケージの __init__.py ファイル (およびすべての親パッケージの __init__.py) を含める必要があることに注意してください。これらの
__init__
.py ファイルには次の行が含まれている必要があります。__import__('pkg_resources').declare_namespace(__name__)
このコードは、名前空間パッケージ機構が動作していること、および現在のパッケージが名前空間パッケージとして登録されていることを確認します。
ディレクトリの階層をパッケージの階層と同じにするメリットはあるのでしょうか? それとも、これは、distribute/setuptools の名前空間パッケージ機能の技術的要件ですか?
元、
サブパッケージfoo.barを提供したいと思います。これにより、次のフォルダー階層を構築し、__init__.py を準備して setup.py を名前空間パッケージとして機能させる必要があります。
~foo.bar/
~foo.bar/setup.py
~foo.bar/foo/__init__.py <= one-lined file dedicated to namespace packages
~foo.bar/foo/bar/__init__.py
~foo.bar/foo/bar/foobar.py
私は名前空間パッケージに精通していませんが、1) foo/bar と 2) (ほぼ) 1 行の __init__.py が日常的なタスクであるように見えます。彼らは「これは名前空間パッケージです」といういくつかのヒントを提供しますが、 setup.pyにその情報が既にあると思いますか?
編集:
次のブロックに示されているように、ネストされたディレクトリがなく、作業ディレクトリに __init__.py が 1 行しかない名前空間パッケージを作成できますか? つまり、setup.pyに 1 行を追加するだけでそれらを自動的に生成するように依頼できnamespace_packages = ['foo']
ますか?
~foo.bar/
~foo.bar/setup.py
~foo.bar/src/__init__.py <= for bar package
~foo.bar/src/foobar.py