【问题标题】:What are the benefits and downsides of using the Python packaging *.egg format over a simple directory with setup.py?在带有 setup.py 的简单目录上使用 Python 打包 *.egg 格式有什么好处和坏处?
【发布时间】:2012-08-29 23:24:32
【问题描述】:

当我发布一个程序时,我通常只是创建一个 setup.py 并将其放在 pypi 上。它可以用 pip 安装,我总是可以轻松地与他人分享。它适用于我,显然适用于很多人。

我看到了制作 exe、deb 或 rmp 以简化系统管理员的好处。

但我真的不明白使用鸡蛋的意义。你能告诉我我能从中得到什么吗?

我也曾经读过鸡蛋有缺点,但我再也找不到这篇文章了。你能告诉我使用这种包装格式会导致什么问题吗?

请注意,我确实看到了this question,但答案也适用于带有 setup.py 的简单目录。它并没有告诉我鸡蛋相对于简单格式的好处。

【问题讨论】:

    标签: python packaging egg


    【解决方案1】:

    Eggs 与特定的架构和 python 版本相关联,直到 Python 3.3,如果 egg 包含 C 扩展,甚至是内部 Unicode 表示大小(UCS2 与 UCS4)。

    不幸的是,后者的差异没有在 egg 元数据中捕获; egg 文件名包含架构和 python 版本(major.minor,所以 2.4 或 3.1),但省略了 unicode 字节大小。

    因此,鸡蛋不太便携。另一方面,.tgz.zip 发行版(希望)与平台无关。您的安装工具,无论是easy_installpipbuildout 还是其他任何东西,都知道如何为您将 python 包分发编译成一个鸡蛋,因此您通常避免分发.egg文件。

    唯一的例外是 Windows,大多数人都缺少编译 C 扩展的工具链。由于 Python 的 Windows 发行版默认使用 UCS2,您通常可以安全地分发具有 C 扩展名的 Windows .egg 构建包,以便通过自动化工具进行安装。

    如果您使用setup.py 脚本来创建分发,那么创建一个仅用于上传到 PyPI 的源代码包是很简单的。我可以推荐Python Packaging User Guide 了解更多信息。

    【讨论】:

    • 如果您对示例感兴趣,请以Acquisition; PyPI 页面包含一个源代码分发,以及 Windows 二进制鸡蛋。
    【解决方案2】:

    *.egg 是一种纯部署格式,在通过easy_install或pip安装包后使用。

    将文件作为 .egg 上传到 PyPI 是没有意义的。这样做的人不知道自己在做什么。

    正确的 PyPI 版本可以是 .tar.gz 存档,也可以是 .zip 存档或 .exe 文件(例如用于 Windows 二进制文件),但绝不是 *.egg 文件。

    【讨论】:

    • 好的,但是为什么要在部署中使用 .egg 而不是使用 pip 获取库、rsync、git 拉取、scp 或仅在 pip 包中使用它?
    • 不,鸡蛋也被设计为分发格式!但他们在这项任务上失败了,因为他们没有考虑到宽 unicode 构建。因此,在实践中我们最终只使用 .eggs 作为部署格式。顺便说一句,Python 3.3 将改变这一切。
    猜你喜欢
    • 2010-09-08
    • 2011-05-14
    • 2012-06-02
    • 2019-11-02
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    相关资源
    最近更新 更多