Python:为什么有些软件包以鸡蛋形式安装,有些软件包作为"鸡蛋文件夹"安装?

Ram*_*hum 25 python packaging egg setuptools

我维护了一些Python包.我有一个非常相似的setup.py文件.但是,在做的时候setup.py install,我的一个软件包被安装为一个鸡蛋,而其他软件包被安装为"鸡蛋文件夹",即扩展名为"egg"的文件夹.

它们之间有什么区别导致这种不同的行为?

ax.*_*ax. 25

Python鸡蛋的内部结构,Zip支持元数据:

如果zip-safe存在,则意味着项目在作为.eggzipfile 安装时将正常工作,相反存在not-zip-safe意味着项目不应该作为.egg文件安装[即.作为.egg目录].zip_safesetuptools 的选项setup()确定将写入哪个文件.如果未提供该选项,则setuptools会尝试根据代码和内容分析自行评估程序包是否可以正常工作.

  • 什么使项目拉链安全?你为什么选择其中一个?(我问有人打包一个项目.) (9认同)
  • 从setuptools文档:http://peak.telecommunity.com/DevCenter/setuptools#setting-the-zip-safe-flag (2认同)

Mat*_*son 5

单个egg 文件实际上是一个包含特定目录结构的zip 存档。每对的zipimport文件,只有.py,.pyc和.pyo文件可以从zip文件导入。因此,如果包需要导入其他类型的模块资源(如编译的 c 代码;.so文件、.pyd文件),它将无法作为 zip 文件工作。

我不知道这是否是某些鸡蛋无法用作 zip 存档的唯一原因,但我认为这是主要原因。