我是Python的新手,我只是想了解它的包是如何工作的。 据推测,“鸡蛋”是某种包装机制,但是它们可以快速概述它们扮演的角色,也许还有一些关于它们为什么有用以及如何创建它们的信息?
#1楼
注意: 鸡蛋包装已被Wheel包装取代。
与Java中的.jar
文件相同的概念,它是一个.zip
文件,其中一些元数据文件重命名为.egg
,用于将代码分发为bundle。
“Python egg”是一个逻辑结构,体现了Python项目特定版本的发布,包括其代码,资源和元数据。 有多种格式可用于物理编码Python egg,其他格式可以开发。 然而,Python egg的一个关键原则是它们应该是可发现的和可导入的。 也就是说,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
这会生成很多输出,但是当它完成后你会看到你有三个新文件夹: build , dist和mymath.egg-info 。 我们关心的唯一文件夹是dist文件夹,你可以找到你的.egg
文件, mymath-0.1-py3.5.egg
和你的默认python(安装)版本号(我的这里:3.5)
资料来源: Python图书博客
#3楼
“Egg”是Python相关项目的单文件可导入分发格式。
“Python鸡蛋快速指南”指出, “鸡蛋对于蟒蛇来说就像罐子里的Java一样......”
鸡蛋实际上比罐子更丰富; 他们拥有有趣的元数据,如许可详细信息,发布依赖项等。
#4楼
Python egg是一种通过Python项目捆绑附加信息的方法,它允许在运行时检查和满足项目的依赖项,以及允许项目为其他项目提供插件。 有几种二进制格式包含鸡蛋,但最常见的是'.egg'zipfile格式,因为它是一个方便的分发项目。 所有格式都支持包括特定于程序包的数据,项目范围的元数据,C扩展和Python代码。
安装和使用Python egg的最简单方法是使用“Easy Install”Python包管理器,它将为您查找,下载,构建和安装鸡蛋; 您所要做的就是告诉它您想要使用的Python项目的名称(以及可选的版本)。
Python egg可以与Python 2.3及更高版本一起使用,并且可以使用setuptools包构建(请参阅Python Subversion沙箱获取源代码,或使用EasyInstall页面获取当前安装说明)。
Python Eggs的主要好处是:
他们启用了像“Easy Install”Python包管理器这样的工具
.egg文件是Python包的“零安装”格式; 不需要构建或安装步骤,只需将它们放在PYTHONPATH或sys.path上并使用它们(如果使用C扩展或数据文件,可能需要安装运行时)
它们可以包括包元数据,例如它们所依赖的其他蛋
它们允许“名称空间包”(仅包含其他包的包)被拆分为单独的发行版(例如zope。 ,twisted。 ,peak。*包可以作为单独的蛋分发,不像普通包必须始终放在相同的包下父目录。这允许现在巨大的单片包作为单独的组件分发。)
它们允许应用程序或库指定所需的库版本,因此您可以在执行twisted.internet导入之前例如要求(“Twisted-Internet> = 2.0”)。
它们是一种很好的格式,用于将扩展或插件分发到可扩展的应用程序和框架(例如Trac,它使用插件从0.9b1开始使用插件),因为egg运行时提供了简单的API来定位鸡蛋并找到他们广告的入口点(类似到Eclipse的“扩展点”概念)。
还有其他好处可能来自标准化格式,类似于Java的“jar”格式的好处。