1. ホーム
  2. python

[解決済み] Pythonパッケージとegg-infoディレクトリ

2023-06-10 17:09:22

質問

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 で見えるようにしたい場合、module ディレクトリと egg-info ディレクトリを site-packages ディレクトリにシンボリックリンクすればよいのでしょうか。私は自分でこれを試しただけですが、パッケージがsetuptoolsに見えるかどうかをテストする方法がよくわかりません。これをテストする方法も教えていただけるとボーナスポイントになります :)

私がこのすべてを理解しようとしている主な理由は、私のモジュールのいくつかをsite-packagesにシンボリックリンクしたいので、私はそれらに変更を加え、変更のたびにPyPIから卵を再インストールしなくてもそれらを使用するスクリプトに変更を表示させることができます。

どのように解決するのですか?

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

pkg_resources (これはメタデータを読み取るライブラリです) には、関数 require という関数があり、パッケージの特定のバージョンを要求するために使用することができます。古いスタイルの通常のインポートでは、easy_install は .pth ファイルをハックして、egg ディレクトリを sys.path に取得します。single-version-externally-managed では、(システムの pacakging インフラストラクチャ、例えば rpm や dpkg によって) インストールされるバージョンが 1 つだけなので、このハッキングは必要ではありません。egg-info はまだ含まれており、アプリケーションのために require (あるいは他の pkg_resources のバインディング機構) を使用するアプリケーションのために、egg-info はまだ含まれています。

ハードリンクでパッケージをインストールしたい場合、 "setup.py develop" を使用することをお勧めします。これは setuptools のコマンドで、実際には egg をインストールしませんが、サイト全体で利用できるようにします。そのために、pkg_resources がそれを見つけられるように egg-link ファイルを作成し、通常の import がそれを見つけられるように .pth ファイルを操作します。