将Python库/应用程序打包为.egg文件有什么优势?

28

我已经了解了 .egg 文件的一些内容,并注意到它们在我的 lib 目录中,但是作为开发人员使用它们有什么优点和缺点吗?

6个回答

32

来自Python企业应用工具包社区

"在Python中,蛋就像Java中的JAR一样..."

Python蛋是一种将附加信息与Python项目捆绑在一起的方式,它允许在运行时检查和满足项目的依赖关系,同时也允许项目为其他项目提供插件。几种二进制格式都体现了蛋的特性,但最常见的是“.egg” zip文件格式,因为它很方便地用于分发项目。 所有这些格式都支持包括特定于包的数据、项目范围的元数据、C扩展和Python代码。

Python Eggs的主要优点是:

  • 它们使类似于“Easy Install” Python包管理器的工具成为可能

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

  • 它们可以包含软件包元数据,例如它们所依赖的其他蛋

  • 它们允许“命名空间包”(仅包含其他包的包)拆分为单独的发行版(例如,zope。,twisted。,peak.*包可以作为单独的蛋进行分发,而不像普通包必须始终放在同一父目录下。这允许现在庞大的大型软件包被分发为单独的组件。)

  • 它们允许应用程序或库指定所需库的版本,因此您可以在执行import twisted.internet之前,例如要求("Twisted-Internet>=2.0")。

  • 它们是分发扩展或插件给可扩展应用程序和框架(例如Trac,自0.9b1起使用egg作为插件)的良好格式,因为egg运行时提供了简单的API来定位egg并查找其广告入口点(类似于Eclipse的“扩展点”概念)。

  • 还有其他好处可从拥有标准化格式中获得,类似于Java的“jar”格式的好处。

-Adam


但是如果依赖的Python包没有上传二进制egg到PyPi怎么办? - Mitar

5
一个单独的egg并不能比一个适当的源代码版本更好。好处在于依赖处理。像Debian或RPM软件包一样,您可以声明依赖于其他eggs,它们将自动安装(通过pypi.python.org)。
第二个评论:egg格式本身是一种二进制打包格式。仅由Python代码组成的普通Python软件包最好以“源代码发布”方式分发,因此使用“python setup.py sdist”生成.tar.gz文件。当上传到pypi时,这些也通常被称为“eggs”。
当您需要绑定一些C代码扩展时,您需要二进制egg:然后您将需要几个二进制egg(32位Unix、Windows等)。

但是如果依赖的Python包没有上传二进制egg到PyPi怎么办? - Mitar
你只需要面对必须要有编译器的问题。没有什么神奇的解决方法:你要么有预编译的包/蛋,要么没有。 - Reinout van Rees
是的,我有我的预编译包/egg,但是依赖关系呢?有没有一种方法可以说如果PyPi上没有egg可用,请使用这个和这个存储库? - Mitar

4

使用Egg文件是一种分发Python应用程序的很好方式。可以将其视为独立于平台的.deb文件,它将安装所有依赖项等内容。优点是易于最终用户使用。缺点是将应用程序打包成.egg文件可能会很麻烦。

除了.egg文件外,您还应提供另一种安装方式。有些人不喜欢使用egg文件,因为他们不喜欢软件程序安装任何它想要的软件。这些通常是系统管理员类型。


3

.egg文件基本上是一种很好的部署Python应用程序的方式。您可以将其视为Java的.jar文件。

更多信息在此处


1
无论如何,都不要停止分发你的应用程序,同时以tarball的形式进行打包,因为这是操作系统中最容易打包的格式之一。

1
对于简单的Python程序,您可能不需要使用egg。分发原始的.py文件就足够了;这就像为GNU/Linux分发源文件一样。您还可以使用各种操作系统“打包程序”(如py2exe或py2app)来创建.exe、.dmg或其他不同操作系统的文件。
更复杂的程序,例如Django,由于需要各种模块和依赖项,基本上需要使用egg。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接