web-dev-qa-db-ja.com

Python、名前空間とアンダースコア付きのモジュール

私はいくつかの独立したモジュールを使用するプロジェクトを開発していますが、すべて同じプロジェクトに関連しています。

ただし、私はこの選択に直面しています。アンダースコア付きのモジュール名と名前空間です。

たとえば、次のツリーがあります。

Foo
 |-Bar1
 |  |-Bar2
 |-Foo1
 |  |-Foo2
 |  |-Foo3

たとえば、Foo3はBar2に依存していますが、Foo2とBar2はスタンドアロンであるとします。

パフォーマンス、パッケージ化のしやすさ(pypiへの変換)およびコードの可読性に関するベストプラクティスは何ですか?

_を使用:Foo_Bar_Bar1Foo_Foo1_Foo2およびFoo_Foo1_Foo3

または名前空間の使用:Foo.Bar.Bar1Foo.Foo1.Foo2、およびFoo.Foo1.Foo3

モジュールと名前空間を使用する方が美しいですが、pipでは、独立したパッケージが別の場所に保存されます。 pypiからインストールされたパッケージと同じ名前空間を使用する編集可能なパッケージを組み合わせるとバグがあることも読みました

参照: https://github.com/pypa/pip/issues/

また、名前空間に関する別の問題は、Fooがコンテンツを持つことができず、パッケージになることができないことです(名前空間モジュールには、名前空間宣言のみが含まれている必要があります): https://pythonhosted.org/setuptools /setuptools.html#namespace-packages (または私は理解していませんでした)

1
hl037_

ここではパフォーマンスについては気にしませんが、ユーザビリティについては気にします。

モジュールはPythonプログラムの存続期間中に一度だけロードされます。ネストされたモジュールを含むモジュールおよびパッケージ内の要素の参照は実質的に無料です。ここではパフォーマンスは重要ではありません

モジュールを使用して、プロジェクトを論理ユニットにグループ化します。概念的に密接に関連しているものが名前空間内にクラスター化されていると、読みやすく、保守しやすくなります。

3
Martijn Pieters