我试图了解Python包是如何工作的。假设鸡蛋是某种包装机制,但如何快速概述它们所起的作用,以及它们为什么有用以及如何创建它们的一些信息?


当前回答

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

“Python Eggs的快速指南”指出,“Eggs之于Python,就像jar之于Java……”

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

其他回答

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

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

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

这种形式出现在2004年左右,一直使用到2010年代中期,现在已经完全被车轮和pip安装所取代。

使用easy_install命令安装鸡蛋。该命令在setuptools v58.3(2021年)中被移除。你不能再用鸡蛋了。

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

推荐这个较长的回答https://stackoverflow.com/a/68897551/5994461,了解python打包的深入历史。它涉及到pip,车轮,鸡蛋和更多的东西。

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

“Python Eggs的快速指南”指出,“Eggs之于Python,就像jar之于Java……”

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

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

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

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

例子: 要为一个目录(比如mymath)创建一个。egg文件,该目录本身可能有几个python脚本,执行以下步骤:

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

然后,从终端做:

 $ python setup.py bdist_egg

这将生成大量输出,但当它完成时,您将看到有三个新文件夹:build、dist和mymath.egg-info。我们唯一关心的文件夹是dist文件夹,在这里可以找到。egg文件mymath-0.1-py3.5。使用默认的python(安装)版本号(我的是3.5)

来源:Python库博客

注:鸡蛋包装已被车轮包装取代。

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

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

A "Python egg" is a logical structure embodying the release of a specific version of a Python project, comprising its code, resources, and metadata. There are multiple formats that can be used to physically encode a Python egg, and others can be developed. However, a key principle of Python eggs is that they should be discoverable and importable. That is, it should be possible for a Python application to easily and efficiently find out what eggs are present on a system, and to ensure that the desired eggs' contents are importable. The .egg format is well-suited to distribution and the easy uninstallation or upgrades of code, since the project is essentially self-contained within a single directory or file, unmingled with any other projects' code or resources. It also makes it possible to have multiple versions of a project simultaneously installed, such that individual programs can select the versions they wish to use.