あり、この非常に良い議論がthis answerでだ、とあなたはおそらく(ない)間と通常のパッケージ(__init__.py
を使用)と名前空間のパッケージの違いを明確にするPEP 420に精通している必要があります。
私が答えとして提供するのは、読書、参考文献、および意見の組み合わせです。ここでは「標準的」または「ピジョンソニック」であるという主張はありません。
[初期化]ユースケースはまだPython 3.3+と関連がありますか?
はい。 exampleをユースケースとしてください。パッケージの作成者は、ルートパッケージの名前空間にいくつかのものを持ち込み、ユーザーが内部構造を気にする必要がないようにします。
別のケースでは、モジュールのhierarchyが作成されています。その参照(オライリー)は、実際に言う:
__init__.py
ファイルの目的は、パッケージのように異なるレベルが遭遇している実行し、オプションの初期化コードを含めることです。
彼らはその議論の中で、名前空間のパッケージを検討しますが、継続ん:あなただけの新しいパッケージの作成を始めている場合
をすべてのものが等しい場合、__init__.py
ファイルが含まれています。
だから、あなたの2番目の質問のために、
は可能であれば完全に__init__.py
を回避するための最善の方法ですか?ノー
、あなたの目的は、通常のパッケージではなく名前空間パッケージを作成することである場合を除き、その場合、あなたなければならない使用__init__.py
。
なぜあなたはそれを望みますか?
foo-package/
spam/
blah.py
bar-package/
spam/
grok.py
>>> import sys
>>> sys.path.extend(['foo-package', 'bar-package'])
>>> import spam.blah
>>> import spam.grok
>>>
することができます:オライリー・リファレンスは別の、独立して維持されたパッケージから崩壊名前空間にできることです私は名前空間のパッケージがクールである理由について見てきた明確なexampleを、持っています 誰もが独自のコードで名前空間を拡張できます。クール。
「__init __。py」を使用し続ける本当の理由は、下位互換性のためです。 –
@leafそう、私が言及した[example](http://stackoverflow.com/a/29509611/336527)はどうですか? Python 3.3以降でこれを行う正規の方法は何ですか? – max