【发布时间】:2011-02-17 09:55:08
【问题描述】:
我维护了一些 Python 包。我对他们每个人都有一个非常相似的setup.py 文件。但是,在执行setup.py install 时,我的一个包被安装为 egg,而其他包被安装为“egg 文件夹”,即扩展名为“egg”的文件夹。
导致这种不同行为的它们之间的区别是什么?
【问题讨论】:
标签: python packaging setuptools egg
我维护了一些 Python 包。我对他们每个人都有一个非常相似的setup.py 文件。但是,在执行setup.py install 时,我的一个包被安装为 egg,而其他包被安装为“egg 文件夹”,即扩展名为“egg”的文件夹。
导致这种不同行为的它们之间的区别是什么?
【问题讨论】:
标签: python packaging setuptools egg
The Internal Structure of Python Eggs, Zip Support Metadata:
如果
zip-safe存在,则意味着项目在安装为.eggzip 文件时可以正常工作,反之not-zip-safe的存在意味着项目不应安装为.egg文件[即。作为.egg目录]。 setuptools 的setup()的zip_safe选项确定将写入哪个文件。如果未提供该选项,setuptools 会尝试根据代码和内容分析自行评估包是否可以工作。
【讨论】:
一个egg文件实际上是一个zip压缩包,里面有一个特定的目录结构。根据zipimport 文档,只有.py、.pyc 和.pyo 文件可以从zip 文件中导入。因此,如果包需要导入其他类型的模块资源(如编译的 c 代码;.so 文件,.pyd 文件),它将无法作为 zip 文件使用。
我不知道这是否是某些鸡蛋不能用作 zip 档案的唯一原因,但我认为这是主要原因。
【讨论】: