将Python库/应用打包为.egg文件的优点是什么?

28 投票
6 回答
11098 浏览
提问于 2025-04-11 09:14

我了解了一些关于 .egg 文件的知识,并且在我的库目录里见过它们。那么,作为开发者,使用 .egg 文件有什么好处和坏处呢?

6 个回答

4

Egg文件是一种很不错的方式来分发Python应用程序。可以把它想象成一个不依赖于平台的.deb文件,它会自动安装所有需要的依赖项和其他东西。优点是对最终用户来说使用起来很简单。不过缺点是,把你的应用打包成.egg文件可能会比较麻烦。

除了.egg文件,你还应该提供其他安装方式。有些人不喜欢使用.egg文件,因为他们不喜欢软件程序随意安装其他软件的想法。这些人通常是系统管理员类型。

5

一个单独的“蛋”(egg)并不比一个合适的源代码发布版本更好。好的地方在于它的依赖管理。就像Debian或RPM包一样,你可以声明你依赖其他的“蛋”,它们会自动安装(通过 pypi.python.org)。

第二个评论:蛋的格式本身是一种二进制打包格式。普通的Python包如果只是包含Python代码,最好是以“源代码发布”的方式分发,也就是用“python setup.py sdist”命令,这样会生成一个.tar.gz文件。当这些文件上传到pypi时,它们也常被称为“蛋”。

你需要二进制“蛋”的地方是,当你要打包一些C语言的扩展代码时。那样的话,你就需要几个不同的二进制“蛋”(比如一个32位的Unix版本,一个Windows版本等等)。

32

来自 Python企业应用套件社区

"Python的Egg就像Java的Jar..."

Python的Egg是一种将额外信息打包到Python项目中的方式,这样在运行时就可以检查和满足项目的依赖关系,同时也允许项目为其他项目提供插件。虽然有几种不同的格式来表示Egg,但最常见的是'.egg'这种压缩文件格式,因为它方便用于分发项目。所有这些格式都支持包含特定于包的数据、项目的元数据、C扩展和Python代码。

Python Egg的主要好处有:

  • 它们支持像“Easy Install”这样的Python包管理工具。

  • .egg文件是一种“零安装”格式的Python包;不需要构建或安装步骤,只需将它们放到PYTHONPATH或sys.path中就可以使用(如果使用了C扩展或数据文件,可能需要安装运行时环境)。

  • 它们可以包含包的元数据,比如它们依赖的其他Egg。

  • 它们允许“命名空间包”(只包含其他包的包)分成独立的分发版本(例如,zope.、twisted.、peak.*包可以作为独立的Egg分发,而普通包必须始终放在同一个父目录下。这使得现在庞大的单一包可以作为独立组件分发。)

  • 它们允许应用程序或库指定所需的库版本,比如你可以在导入twisted.internet之前要求“Twisted-Internet>=2.0”。

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

  • 还有其他一些好处,类似于Java的“jar”格式带来的好处。

-Adam

撰写回答