web-dev-qa-db-ja.com

PythonパッケージとEgg-infoディレクトリ

Egg-infoディレクトリがそれぞれのモジュールにどのように結び付けられているかを誰かが説明できますか?たとえば、私は次のものを持っています:

/usr/local/lib/python2.5/site-packages/quodlibet/
/usr/local/lib/python2.5/site-packages/quodlibet-2.0.Egg-info/

Egg-infoディレクトリは、対応するモジュールをsetuptools(easy_install)から見えるようにすることだと思いますか?その場合、setuptoolsはEgg-infoディレクトリをモジュールディレクトリにどのように結び付けますか?

私が正しい軌道に乗っていると仮定し、例のために...私の既存のパッケージをsetuptoolsから見えるようにしたい場合、モジュールディレクトリとEgg-infoディレクトリをサイトにシンボリックリンクできますか?パッケージディレクトリ?私は自分でこれを試してみましたが、パッケージがsetuptoolsに表示されるかどうかをテストする方法がわかりません。これをテストする方法を教えてもらえたらボーナスポイント:)

私がこれをすべて理解しようとしている主な理由は、モジュールの一部をシンボリックリンクしてサイトパッケージにしたいので、それらを変更し、再インストールせずにそれらを使用するスクリプトに変更を表示できるようにするためです各変更後のPyPIからの卵。

75
Jeremy Cantrell

.single-version-externally-managedを使用してEggをインストールした場合にのみ、.Egg-infoディレクトリが作成されます。 「通常」、Eggをインストールすると、コードとメタデータの両方を含む単一のディレクトリ(またはZipファイル)が作成されます。

pkg_resources(メタデータを読み取るライブラリ)には、特定のバージョンのパッケージを要求するために使用できる関数requireがあります。 「古いスタイル」の通常のインポートの場合、easy_installは.pthファイルをハッキングしてEggディレクトリをsys.pathに取得します。 --single-version-externally-managedの場合、単一のバージョンのみがインストールされるため(システムのpacakgingインフラストラクチャ、たとえばrpmまたはdpkg)、このハッキングは必要ありません。 require(または他のpkg_resourcesバインディングメカニズムのいずれか)を使用するアプリケーションには、Egg-infoがまだ含まれています。

ハードリンクでパッケージをインストールする場合は、「setup.py developer」を使用することをお勧めします。これは、実際にEggをインストールするのではなく、サイト全体で使用できるようにするsetuptoolsからのコマンドです。そのために、pkg_resourcesが検索できるようにEgg-linkファイルを作成し、通常のインポートで検索できるように.pthファイルを操作します。

69