2010-05-09 142 views
21

我维护一些Python包。我有一个非常相似的setup.py文件为他们每个人。但是,在做setup.py install时,我的一个软件包被安装为一个蛋,而其他软件被安装为“蛋文件夹”,即扩展名为“蛋”的文件夹。Python:为什么有些软件包被安装成鸡蛋,有些软件包被安装成“蛋文件夹”?

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

+0

(我在Windows XP上。) – 2010-05-09 17:09:34

回答

22

如果zip-safe存在,这意味着当为.egg压缩文件安装项目将正常工作,而相反的not-zip-safe的存在意味着该项目不应该被安装为.egg文件[即。作为.egg目录]。 setuptools'setup()zip_safe选项确定将写入哪个文件。如果没有提供选项,setuptools会根据代码和内容分析尝试自行评估软件包是否可以工作。

+7

是什么使项目安全可靠?你为什么要选择一个或另一个? (我问是否有人打包一个项目。) – 2012-03-09 17:31:58

+2

来自setuptools文档:http://peak.telecommunity.com/DevCenter/setuptools#setting-the-zip-safe-flag – saffsd 2013-04-08 00:15:30

4

一个鸡蛋文件实际上是一个内部具有特定目录结构的zip文件。根据zipimport文档,只能从zip文件导入.py,.pyc.pyo文件。因此,如果程序包需要导入其他类型的模块资源(如编译后的c代码; .so文件,.pyd文件),它将不能用作zip文件。

我不知道这是否是只有有理由认为有些鸡蛋不能用作zip压缩文件,但我认为这是主要原因。

+0

这不是主要原因。这甚至不是一个正确的理由。 setuptools增加了特殊的加载器,使.so和.pyd文件即使在压缩的蛋中也能正常工作。另一个答案是正确的。 – 2010-05-24 16:05:07