我维护了一些Python包。我为每个人都有一个非常相似的setup.py
文件。但是,在执行setup.py install
时,我的一个软件包作为一个鸡蛋安装,而其他软件包则作为“鸡蛋文件夹”安装,即扩展名为“egg”的文件夹。
它们之间有什么区别导致这种不同的行为?
答案 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档案,但我认为这是主要原因。