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

时间:2010-05-09 17:09:23

标签: python packaging setuptools egg

我维护了一些Python包。我为每个人都有一个非常相似的setup.py文件。但是,在执行setup.py install时,我的一个软件包作为一个鸡蛋安装,而其他软件包则作为“鸡蛋文件夹”安装,即扩展名为“egg”的文件夹。

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

2 个答案:

答案 0 :(得分:24)

The Internal Structure of Python Eggs, Zip Support Metadata

  

如果zip-safe存在,则表示项目在作为.egg zipfile安装时将正常工作,相反,not-zip-safe的存在意味着项目不应作为{{ {1}}档案[即。作为.egg目录]。 setuptools'.egg的{​​{1}}选项决定了要写入的文件。如果未提供该选项,setuptools会尝试根据代码和内容分析自行评估包是否可以正常工作。

答案 1 :(得分:4)

单个egg文件实际上是一个zip存档,里面有一个特定的目录结构。根据{{​​3}}文档,只能从zip文件导入.py.pyc.pyo文件。因此,如果软件包需要导入其他类型的模块资源(如已编译的c代码; .so文件,.pyd文件),则它将无法用作zip文件。

我不知道这是否只是 的原因,有些鸡蛋不能用作zip档案,但我认为这是主要原因。