什么是Python鸡蛋?


530

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

Answers:


527

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

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

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

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

.egg格式非常适合于分发以及代码的轻松卸载或升级,因为该项目本质上是独立的,包含在单个目录或文件中,没有与任何其他项目的代码或资源混合在一起。它还可以同时安装一个项目的多个版本,以便各个程序可以选择他们想要使用的版本。


82

.egg文件是Python软件包的分发格式。它只是源代码发行版或Windows的替代方案exe。但是请注意,对于pure 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

这将产生很多输出,但是完成后,您会看到拥有三个新文件夹:builddistmymath.egg-info。我们唯一关心的文件夹是dist文件夹,您可以在其中找到.egg文件,mymath-0.1-py3.5.egg带有默认的python(安装)版本号(此处为3.5)

资料来源:Python库博客


3

Python蛋是将附加信息与Python项目捆绑在一起的一种方式,它允许在运行时检查和满足项目的依赖关系,并允许项目为其他项目提供插件。有几种包含鸡蛋的二进制格式,但是最常见的是'.egg'zipfile格式,因为它是分发项目的便捷方式。所有格式都支持,包括特定于软件包的数据,项目范围的元数据,C扩展名和Python代码。

安装和使用Python egg的最简单方法是使用“简易安装” Python软件包管理器,它将为您查找,下载,构建和安装egg。您要做的就是告诉它您要使用的Python项目的名称(以及版本)。

Python鸡蛋可以与Python 2.3及更高版本一起使用,并且可以使用setuptools软件包进行构建(有关源代码,请参见Python Subversion沙箱;有关当前安装说明,请参见EasyInstall页面)。

Python Eggs的主要好处是:

  • 它们启用了诸如“轻松安装” Python软件包管理器之类的工具

  • .egg文件是Python软件包的“零安装”格式;无需构建或安装步骤,只需将它们放在PYTHONPATH或sys.path上并使用它们即可(如果使用C扩展名或数据文件,则可能需要安装运行时)

  • 它们可以包括包元数据,例如它们依赖的其他鸡蛋

  • 它们允许将“命名空间包”(仅包含其他包的包)拆分为单独的分布(例如zope。,twisted。,peak。*)包可以作为单独的鸡蛋分发,这与通常必须始终放在同一包下的普通包不同父目录。这允许将现在庞大的整体软件包作为单独的组件分发。)

  • 它们允许应用程序或库指定库的所需版本,以便您可以在导入twisted.internet之前例如require(“ Twisted-Internet> = 2.0”)。

  • 对于将扩展或插件分发到可扩展的应用程序和框架,它们是一种很好的格式(例如Trac,它从0.9b1开始使用鸡蛋作为插件),因为Egg运行时提供了简单的API来查找鸡蛋并找到其广告入口点(类似Eclipse的“扩展点”概念)。

标准化格式还会带来其他好处,类似于Java的“ jar”格式的好处。


python egg是特定于版本的吗?即鸡蛋建2比3?甚至是次要版本?ex 2.x
aleeon '19

1

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

“ Python Eggs快速指南”指出:“ Eggs是Python,而Jars是Java ...”

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


到今天为止,该链接已失效。
Perfi

@Perfi Link对我有用。
克利克(Klik)

有趣的是有时它是如何工作的!它回到了网上。很高兴见到它:)
Perfi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.