2008-11-02 72 views
68

有人可以解释蛋信息目录是如何绑定到他们各自的模块?例如,我有以下几点:Python包和蛋信息目录

/usr/local/lib/python2.5/site-packages/quodlibet/ 
/usr/local/lib/python2.5/site-packages/quodlibet-2.0.egg-info/ 

我假设鸡蛋信息目录是使相应的模块可见的setuptools(easy_install的),对吗?如果是这样,setuptools如何将egg-info目录绑定到模块目录?

假设我在正确的轨道上,并为了举例...如果我想使现有的套件可见setuptools,我可以符号链接模块目录和egg-info目录到site-packages目录?我会自己试试这个,但我不确定如何测试setuptools是否可见。奖金积分,如果你还可以告诉我如何测试:)

我试图理解这一切的主要原因是因为我想符号链接我的一些模块到站点包,以便我可以进行更改给他们并且使用它们的脚本可以看到变化,而不必在每次更改后重新安装PyPI中的egg。

+0

你还有一个quodlibet插件的蟒蛇挂在某处吗?这听起来很酷。 – 2016-01-12 21:33:36

+0

@PeterTurner这可能是quodlibet本身 - [它是用Python编写的](https://github.com/quodlibet/quodlibet) – 2016-11-17 12:43:30

回答

62

只有在使用--single-version-external-managed来安装egg时,才会创建.egg-info目录。 “通常情况下”,安装一个鸡蛋会创建一个包含代码和元数据的单个目录(或zip文件)。

pkg_resources(它是读取元数据的库)具有功能require,可用于请求特定版本的软件包。对于“老式”,普通的导入,easy_install攻击一个.pth文件,将egg目录放到sys.path中。对于单一版本的外部管理,这种黑客攻击是没有必要的,因为只会安装一个版本(通过系统的pacakging基础设施,例如rpm或dpkg)。对于使用require(或任何其他pkg_resources绑定机制)的应用程序,egg-info仍包含在内。

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