82

有人可以解释一下 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 的鸡蛋。

4

1 回答 1

72

只有在使用 --single-version-externally-managed 安装 egg 时才会创建 .egg-info 目录。“通常”,安装 egg 会创建一个目录(或 zip 文件),其中包含代码和元数据。

pkg_resources(它是读取元数据的库)有一个函数require可以用来请求特定版本的包。对于“老式”的常规导入,easy_install 会破解一个 .pth 文件以将 egg 目录放到 sys.path 中。对于--single-version-externally-managed,这种hacking 是不必要的,因为只会安装一个版本(通过系统的打包基础设施,例如rpm 或dpkg)。require对于使用(或任何其他 pkg_resources 绑定机制)的应用程序,仍然包含 egg-info 。

如果你想通过硬链接安装一个包,我推荐使用“setup.py develop”。这是来自 setuptools 的命令,它实际上并没有安装 egg,而是使它在站点范围内可用。为此,它创建了一个 egg-link 文件,以便 pkg_resources 可以找到它,并且它操作一个 .pth 文件,以便常规导入可以找到它。

于 2008-11-02T06:40:26.033 回答