4

ドキュメントとかなりのスタックオーバーフローの投稿を読みましたが、私の疑問に対する明確な答えは見つかりませんでした。

名前空間パッケージの目的を理解していると思います。

私は Python>=3.3 と暗黙の名前空間パッケージにのみ興味があります - __init__.py.

質問

  1. 名前空間パッケージは他のパッケージのみを含むことになっていますか、それともモジュール (つまり.pyファイル) も「許可」されていますか?

  2. 名前空間パッケージは「コンテナー」パッケージとしてのみ使用されることになっていますか、それとも通常のパッケージに含めることはできますか?

  3. 名前空間パッケージがコンテナーとしてのみ意味がある場合、実際のパッケージ フォルダーがある場合はいつでも、python モジュールを含むすべてのサブフォルダーも?__init__.py

# this is fine
ns_package/
+-- real_package/
   +-- __init.py__

# how about this?
real_package/
+-- __init.py__  # I have it for docs AND want to force the dir to be a real package
+-- ns_package/  # I would just like to avoid an empty __init__.py
   +-- amodule.py

名前空間パッケージはコンテナーとしてのみ意味があると思います。それ以外の場合、親はパッケージの単一ポイントで定義する必要がある実際のパッケージであるため、別のパスにある他のもので名前空間を拡張することはできないためです。ファイルシステム。したがって、名前空間パッケージの主な利点は得られません。

環境

モジュールを(プロジェクトのルートから)実行およびインポートするときに、通常のパッケージ内の暗黙的な名前空間パッケージの場合は完全に正常に機能するため、私は尋ねています。ただし、インストールにはセットアップ スクリプトを微調整する必要があり、そもそも何か問題があるのではないかと思います。

注: 暗黙の名前空間パッケージを使用しようとしているのは、主にその機能を利用したいからではなく、空のファイルが嫌いだからです__init__.py。私は当初、python 3.3 が最終的にそれを取り除き、パッケージは__init__.pyもう必要ないと思っていましたが、それほど単純ではないようです...

4

1 に答える 1