我是Python的新手,我只想了解它的包是如何工作的。据推测,“鸡蛋”是某种包装机制,但是它们可以快速概述它们扮演的角色,也可能是一些关于它们为什么有用以及如何创建它们的信息?
答案 0 :(得分:478)
与Java中的.jar
文件相同的概念,它是一个.zip
文件,其中一些元数据文件重命名为.egg
,用于将代码分发为捆绑包。
Specifically: The Internal Structure of Python Eggs
“Python egg”是体现a版本的逻辑结构 特定版本的Python项目,包括其代码,资源, 和元数据。有多种格式可供使用 物理编码一个Python蛋,其他人可以开发。然而, Python蛋的一个关键原则是它们应该是可被发现的 可导入。也就是说,Python应用程序应该可以 轻松有效地找出系统中存在的鸡蛋,以及 确保所需的鸡蛋内容是可输入的。
.egg
格式非常适合分发和简单 卸载或升级代码,因为项目本质上是 自包含在单个目录或文件中,与任何内容无关 其他项目的代码或资源。它也使它成为可能 同时安装了多个版本的项目,这样 个别程序可以选择他们希望使用的版本。
答案 1 :(得分:59)
.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
这将生成大量输出,但是当它完成后,您将看到三个新文件夹: build , dist ,和 mymath.egg-info 。我们关心的唯一文件夹是 dist 文件夹,您可以在其中找到您的.egg
文件, mymath-0.1-py3.5.egg
与您的默认python(安装)版本号(我的:3.5)
答案 2 :(得分:2)
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”格式。
答案 3 :(得分:1)
“Egg”是Python相关项目的单文件可导入分发格式。
"The Quick Guide to Python Eggs"注意到“鸡蛋是蟒蛇,因为罐子是Java ......”
鸡蛋实际上比罐子更丰富;他们拥有有趣的元数据,如许可细节,发布依赖等等。