Python软件包和egg-info目录


80

有人可以解释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获取鸡蛋。


您是否仍然在某个地方徘徊着python的quodlibet插件?听起来真的很酷。
彼得·特纳

@PeterTurner可能是quodlibet本身-用Python编写
Florian Brucker

Answers:


71

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

pkg_resources(读取元数据的库)具有require可用于请求特定版本软件包的功能。对于“旧式”常规导入,easy_install破解.pth文件以将egg目录移至sys.path。对于--single-version-external-managed,不需要进行这种黑客攻击,因为仅安装了一个版本(通过系统的封装基础设施,例如rpm或dpkg)。对于使用的应用程序require(或任何其他pkg_resources绑定机制),仍然包含egg-info 。

如果要通过硬链接安装软件包,建议使用“ setup.py development”。这是来自setuptools的命令,它实际上并未安装egg,但使它在整个站点范围内都可用。为此,它将创建一个egg-link文件,以便pkg_resources可以找到它,并操纵一个.pth文件,以便常规导入可以找到它。


26
要扭转的影响setup.py develop,请使用setup.py develop -u
codewarrior11年

请注意,这是小写字母-u。大写字母-U还有其他功能。
CGFoX
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.