什么是Python蛋?

Bia*_*cki 497 python egg

我是Python的新手,我只是想了解它的包是如何工作的.据推测,"鸡蛋"是某种包装机制,但是它们可以快速概述它们扮演的角色,也可能是一些关于它们为什么有用以及如何创建它们的信息?

小智 499

注意:鸡蛋包装已被Wheel包装取代.

.jarJava中的文件相同的概念,它是一个.zip重命名了一些元数据文件的文件.egg,用于将代码分发为bundle.

具体来说:Python Eggs的内部结构

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

.egg格式非常适合分发和代码的轻松卸载或升级,因为项目基本上是自包含在单个目录或文件中,与任何其他项目的代码或资源无关.它还可以同时安装多个版本的项目,以便各个程序可以选择他们希望使用的版本.


kma*_*o23 70

.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()
    )
Run Code Online (Sandbox Code Playgroud)

然后,从终端做:

 $ python setup.py bdist_egg
Run Code Online (Sandbox Code Playgroud)

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

资料来源:Python图书博客

  • 虽然 Egg 文件可跨操作系统移植,但值得注意的是,它包含已编译的 pyc 代码,因此使用一个 Python 版本 (XY) 编译的 Egg 与其他版本不兼容。 (2认同)

use*_*461 40

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

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

该格式没有明确规定它必须包含什么内容或如何为不同版本的 python 和不同操作系统制作包,这是它被替换的原因之一。

该格式于 2004 年左右出现,一直使用到 2010 年代中期,已完全被wheels和取代pip install

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

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

推荐这个较长的答案/sf/answers/4822828601/以深入了解 python 打包的历史。它涉及点、轮子、鸡蛋等等。

更新:自 2023 年 7 月起,官方 python 包存储库 pypi.org不再接受 .egg 包的上传。

  • “使用鸡蛋的工具已不复存在”是一个错误的说法。例如,pyspark接受egg文件,但不接受wheels。(参见https://spark.apache.org/docs/latest/api/python/user_guide/python_packaging.html) (2认同)

Aer*_*rin 5

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

《Python Egg 快速指南》指出,“鸡蛋之于 Python,就像罐子之于 Java……”

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