【问题标题】:What is a Python egg?什么是 Python 蛋?
【发布时间】:2011-01-04 07:18:07
【问题描述】:

我是 Python 新手,我只是想了解它的包是如何工作的。大概eggs 是某种打包机制,但什么是它们所扮演角色的快速概述,可能是关于它们为什么有用以及如何创建它们的一些信息?

【问题讨论】:

    标签: python package egg


    【解决方案1】:

    注意:Egg packaging has been superseded by Wheel packaging.

    与 Java 中的 .jar 文件概念相同,它是一个 .zip 文件,其中一些元数据文件重命名为 .egg,用于将代码作为包分发。

    Specifically: The Internal Structure of Python Eggs

    “Python 蛋”是一个逻辑结构,体现了一个 Python 项目的特定版本,包括其代码、资源、 和元数据。有多种格式可用于 物理编码一个 Python 蛋,其他的可以开发。然而, Python 鸡蛋的一个关键原则是它们应该是可发现的,并且 可导入。也就是说,Python 应用程序应该可以 轻松有效地找出系统上存在哪些鸡蛋,以及 以确保所需的鸡蛋内容是可导入的。

    .egg 格式非常适合分发和简单的 卸载或升级代码,因为该项目本质上是 自包含在单个目录或文件中,不与任何 其他项目的代码或资源。这也使得拥有 同时安装一个项目的多个版本,这样 各个程序可以选择他们希望使用的版本。

    【讨论】:

      【解决方案2】:

      .egg 文件是 Python 包的分发格式。它只是源代码分发或 Windows exe 的替代品。但请注意,对于纯 Python.egg 文件是完全跨平台的。

      .egg 文件本身本质上是一个.zip 文件。如果您将扩展名更改为“zip”,您可以看到它在存档中会有文件夹。

      另外,如果您有一个.egg 文件,您可以使用easy_install 将其安装为一个包

      示例: 要为一个目录创建一个.egg 文件,比如mymath,它本身可能有多个 python 脚本,请执行以下步骤:

      # setup.py
      from setuptools import setup, find_packages
      setup(
          name = "mymath",
          version = "0.1",
          packages = find_packages()
          )
      

      然后,从终端执行:

       $ python setup.py bdist_egg
      

      这会产生很多输出,但是当它完成后你会看到你有三个新文件夹:builddist、和 mymath.egg-info。我们唯一关心的文件夹是 dist 文件夹,您可以在其中找到您的 .egg 文件,mymath-0.1-py3.5.egg 以及您的默认 python(安装)版本号(我的这里:3.5)

      来源:Python library blog

      【讨论】:

      • 虽然 egg 文件可以跨操作系统移植,但值得注意的是它包含编译的 pyc 代码,因此使用一个 python 版本 (X.Y) 编译的 egg 与其他版本不兼容。
      【解决方案3】:

      “Egg”是 Python 相关项目的单文件可导入分发格式。

      "The Quick Guide to Python Eggs" 注意到 “鸡蛋之于 Python 就像罐子之于 Java...”

      鸡蛋实际上比罐子更丰富;它们包含有趣的元数据,例如许可详细信息、发布依赖项等。

      【讨论】:

        【解决方案4】:

        免责声明:egg是一种废弃的python包格式,使用eggs的工具已不存在。

        egg 是一个 python 包。它是一个包含 python 源文件和/或编译库的 zip 存档。

        格式没有很好地说明它必须包含什么或如何为不同版本的python和不同的操作系统制作包,这就是它被替换的原因之一。

        该格式出现在 2004 年左右,一直使用到 2010 年代中期,它已完全被 wheelspip install 取代。

        Eggs 是通过命令 easy_install 安装的。该命令已在 setuptools v58.3(2021 年)中删除。你不能再用鸡蛋了。

        如果您看到任何提及 easy_installegg 的内容,无论是任何堆栈溢出答案或教程,它都已严重过时。

        推荐这个更长的答案https://stackoverflow.com/a/68897551/5994461 了解python 打包的深入历史。它涵盖了点子、轮子和鸡蛋等等。

        【讨论】:

          猜你喜欢
          • 2011-01-12
          • 2023-04-10
          • 2016-06-15
          • 2011-02-05
          • 2011-09-11
          • 2016-09-18
          • 2011-02-17
          • 2016-03-03
          • 2017-03-08
          相关资源
          最近更新 更多