我维护了一些 Python 包。我setup.py
对他们每个人都有一个非常相似的文件。但是,在执行此操作时setup.py install
,我的一个包被安装为 egg,而其他包被安装为“egg 文件夹”,即扩展名为“egg”的文件夹。
它们之间有什么区别导致这种不同的行为?
我维护了一些 Python 包。我setup.py
对他们每个人都有一个非常相似的文件。但是,在执行此操作时setup.py install
,我的一个包被安装为 egg,而其他包被安装为“egg 文件夹”,即扩展名为“egg”的文件夹。
它们之间有什么区别导致这种不同的行为?
如果
zip-safe
存在,则表示项目在安装为.egg
zipfile 时可以正常工作,反之,则not-zip-safe
表示项目不应该作为.egg
文件安装 [ie. 作为.egg
目录]。zip_safe
setuptools的选项setup()
决定了将写入哪个文件。如果未提供该选项,setuptools 会尝试根据代码和内容分析自行评估包是否可以工作。
单个 egg 文件实际上是一个 zip 存档,其中包含特定的目录结构。根据zipimport文档,只能从 zip 文件中导入.py
、.pyc
和文件。.pyo
因此,如果包需要导入其他类型的模块资源(如编译的 c 代码;.so
文件、.pyd
文件),它将无法作为 zip 文件工作。
我不知道这是否是某些鸡蛋不能用作 zip 档案的唯一原因,但我认为这是主要原因。