Python:为啥有些包作为鸡蛋安装,有些作为“鸡蛋文件夹”安装?

Posted

技术标签:

【中文标题】Python:为啥有些包作为鸡蛋安装,有些作为“鸡蛋文件夹”安装?【英文标题】:Python: Why do some packages get installed as eggs and some as "egg folders"?Python:为什么有些包作为鸡蛋安装,有些作为“鸡蛋文件夹”安装? 【发布时间】:2011-02-17 09:55:08 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

The Internal Structure of Python Eggs, Zip Support Metadata:

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

【讨论】:

是什么让项目 zip 安全?为什么你会选择其中之一? (我作为打包项目的人问。) 来自 setuptools 文档:peak.telecommunity.com/DevCenter/… saffsd 的链接现在是 setuptools.readthedocs.io/en/latest/…【参考方案2】:

一个egg文件实际上是一个zip压缩包,里面有一个特定的目录结构。根据zipimport 文档,只有.py.pyc.pyo 文件可以从zip 文件中导入。因此,如果包需要导入其他类型的模块资源(如编译的 c 代码;.so 文件,.pyd 文件),它将无法作为 zip 文件使用。

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

【讨论】:

这不是主要原因。这甚至不是一个正确的理由。 setuptools 添加了特殊的加载器以使 .so 和 .pyd 文件即使使用压缩的鸡蛋也能正常工作。另一个答案是正确的。

以上是关于Python:为啥有些包作为鸡蛋安装,有些作为“鸡蛋文件夹”安装?的主要内容,如果未能解决你的问题,请参考以下文章

为啥有些包可以在 Pip 中升级,而不是在 Conda 中? [复制]

为啥easy_install依赖检查在线

为啥有些网站网址不包含文件扩展名?

为啥有些网站 url 不包含文件扩展名?

使用 virtualenv 为不同的 python 版本安装带有包的鸡蛋时出错

从文件而不是鸡蛋运行 Python 包