有人能解释一下 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 目录绑定(bind)到模块目录?

假设我在正确的轨道上,并且为了示例......如果我想让我的现有包对 setuptools 可见,我可以将模块目录和 egg-info 目录符号链接(symbolic link)到站点 -包目录?我自己会尝试这个,但我不确定如何测试该包是否对 setuptools 可见。如果您还可以告诉我如何测试,则可以加分:)

我试图理解这一切的主要原因是因为我想将我的一些模块符号链接(symbolic link)到站点包中,以便我可以对它们进行更改并使使用它们的脚本可以看到更改,而无需重新安装每次更改后来自 PyPI 的鸡蛋。

最佳答案

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

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

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

关于Python 包和 egg-info 目录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/256417/

10-14 17:37
查看更多