Pythonパッケージとegg-infoディレクトリ
-
05-07-2019 - |
質問
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ディレクトリをシンボリックリンクしてsite-packagesディレクトリ?私は自分でこれを試してみましたが、パッケージがsetuptoolsに表示されるかどうかをテストする方法がわかりません。これをテストする方法を教えてもらえたらボーナスポイント:)
これをすべて理解しようとする主な理由は、いくつかのモジュールをサイトパッケージにシンボリックリンクして、それらを変更し、それらを使用することなくそれらを使用するスクリプトに変更を表示できるようにするためです変更のたびにPyPIから卵を再インストールします。
解決
.egg-infoディレクトリは、-single-version-externally-managedがeggのインストールに使用された場合にのみ作成されます。 「通常」、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開発」を使用することをお勧めします。これは、実際にはeggをインストールするのではなく、サイト全体で利用できるようにするsetuptoolsからのコマンドです。そのために、pkg_resourcesが検索できるようにegg-linkファイルを作成し、通常のインポートで検索できるように.pthファイルを操作します。