Python: 为什么有些包以egg形式安装,而有些以"egg文件夹"形式安装?
我维护几个Python包。每个包的setup.py
文件都非常相似。不过,当我运行setup.py install
时,其中一个包被安装成了一个“蛋”(egg),而其他的包则被安装成了“蛋文件夹”,也就是带有“egg”后缀的文件夹。
这两者之间有什么区别,导致它们的安装方式不同呢?
2 个回答
5
一个单独的egg文件其实就是一个带有特定目录结构的压缩包,类似于zip文件。根据zipimport的说明,只有.py
、.pyc
和.pyo
这几种文件可以从zip文件中导入。所以,如果这个包需要导入其他类型的模块资源(比如编译后的C代码;.so
文件,.pyd
文件),那么它就不能作为zip文件使用。
我不确定这是否是一些egg文件不能作为zip档案工作的唯一原因,但我觉得这是主要原因。
29
如果有
zip-safe
这个选项,说明这个项目在作为.egg
压缩文件安装时能正常工作。相反,如果有not-zip-safe
这个选项,就表示这个项目不应该作为.egg
文件安装,也就是说应该以.egg
目录的形式安装。setuptools中的setup()
函数的zip_safe
选项决定了将写入哪个文件。如果没有提供这个选项,setuptools会根据代码和内容分析来判断这个包是否能正常工作。