4

setuptoolsのドキュメントは__init__.py、名前空間からファイルにコードを追加することについて非常に明示的です。

名前空間パッケージの__init__.py. 開発中、またはプロジェクトが .egg ファイルとしてインストールされている場合は機能しているように見えても、プロジェクトが「システム」パッケージ ツールを使用してインストールされている場合は機能しません。このような場合、__init__.pyファイルはインストールされず、実行もされません。 .

しかし、私はこれらの「システム」パッケージ ツールが何であるかを理解していません。彼らは何ですか?__init__.pyファイルがなくなったこの状況をどのように再現できますか?

4

1 に答える 1

2

@Anzelのコメントは良い答えのように見えました.PEP -420はそれを確認していると思います. その根拠セクションでは、次のように読みます。

名前空間パッケージは、複数のディレクトリ間での分割をサポートするように設計されています (したがって、複数のsys.pathエントリを介して検出されます)。__init__.pyこの構成では、各部分が名前空間パッケージを正しく初期化する限り、複数の部分がすべてファイルを提供するかどうかは問題ではありません。ただし、Linux ディストリビューション ベンダー (とりわけ) は、別々の部分を組み合わせて、それらすべてを同じファイル システム ディレクトリにインストールすることを好みます。これにより、競合が発生する可能性が生じます。これは、部分がターゲット システムで同じファイルを提供しようとするためです。これは、多くのパッケージ マネージャーでは許可されていません。暗黙の名前空間パッケージを許可するということは、__init__.pyファイルを完全に削除し、影響を受ける部分を共通のディレクトリにインストールするか、ディストリビューションが適切であると判断した複数のディレクトリに分割することができます。

そう__init__.pyです、OS パッケージ マネージャー (およびその他) はファイルを 1 つのディレクトリ ツリーにマージすることを好むため、これ以上コードをファイルに追加することはできません。

于 2014-12-31T21:45:54.753 に答える