这篇文章主要介绍了在Python的setuptools框架下生成egg的教程,本文来自于IBM官方开发者技术文档,需要的朋友可以参考下
本文介绍了 setuptools 框架的内容,它是 PEAK 的一个副项目,它提供了比 distutils 更加简单的包管理和发行功能。
开始
setuptools 模块很会 “规避”。例如,如果我们下载一个使用 setuptools 而不是使用 distutils 构建的包,那么安装就应该可以像我们期望的一样工作:通常使用 python setup.py install 就可以。为了实现这种功能,使用 setuptools 绑定在一起的包就会在归档文件中包含一个很小的引导模块 ez_setup.py。此处惟一需要注意的是 ez_setup.py 试图在后台下载并安装所需要的 setuptools ―― 当然,这需要有一个连接网络的机器。如果 setuptools 早已在本地机器上安装了,那么这个后台步骤就不再需要执行;但是如果它需要手工进行安装,那么很多透明性就都丢失了。不过,大部分系统现在都有一个 Internet 连接了;为没有连接网络的机器多执行几个特殊步骤也并非特别麻烦。
setuptools 的真正优点并不在于实现 distutils 所能实现的功能 ―― 尽管它 的确 增强了 distutils 的功能并简化了 setup.py 脚本中的内容。setuptools 最大的优势是它在包管理能力方面的增强。它可以使用一种更加透明的方法来查找、下载并安装依赖包;并可以在一个包的多个版本中自由进行切换,这些版本都安装在同一个系统上;也可以声明对某个包的特定版本的需求;还可以只使用一个简单的命令就能更新到某个包的最新版本。给人印象最为深刻的是,即使有些包的开发人员可能还从未考虑过任何 setuptools 兼容性问题,我们依然可以使用这些包。
下面让我们详细探讨一下。
引导
工具 ez_setup.py 是一个简单的脚本,它可以引导 setuptools 中其余部分。有点让人困惑的是,完整 setuptools 包中所提供的 easy_install 脚本与 ez_setup.py 所实现的功能是相同的。不过前者假设 setuptools 早已安装了,因此它会跳过幕后的安装过程。这两个版本都可以接受相同的参数和开关。
这个过程中的第一个步骤是下载一个小脚本 ez_setup.py:
清单 1. 下载引导脚本
% wget -q http://peak.telecommunity.com/dist/ez_setup.py
然后,就可以不带任何参数运行脚本来安装 setuptools 中其余部分了(如果不作为一个单独的步骤来执行这个步骤,在首次安装其他包时,它还是会被完成)。会看到类似于下面的内容(当然,这要取决于所使用的版本):
清单 2. 引导 setuptools
% python ez_setup.py Downloading http://cheeseshop.python.org/packages/2.4/s/ setuptools/setuptools-0.6b1-py2.4.egg#md5=b79a8a403e4502fbb85ee3f1941735cb Processing setuptools-0.6b1-py2.4.egg creating /sw/lib/python2.4/site-packages/setuptools-0.6b1-py2.4.egg Extracting setuptools-0.6b1-py2.4.egg to /sw/lib/python2.4/site-packages Removing setuptools 0.6a11 from easy-install.pth file Adding setuptools 0.6b1 to easy-install.pth file Installing easy_install script to /sw/bin Installing easy_install-2.4 script to /sw/bin Installed /sw/lib/python2.4/site-packages/setuptools-0.6b1-py2.4.egg Processing dependencies for setuptools
完毕。这就是我们需要确保在系统上安装 setuptools 而需要做的工作。
安装包
对于很多 Python 包来说,要安装这些包,需要做的就是将这些包的名字作为一个参数传递给 ez_setup.py 或 easy_install。既然目前已经使用引导脚本加载了 setuptools,那就可以使用内部更加简化的 easy_install(实际上它与我们选择的版本的区别很小)了。
例如,假设希望安装 SQLObject 包。过程非常简单,如清单 3 所示。注意消息中说 SQLObject 依赖于一个名为 FormEncode 的包;所幸的是,这会被很好地解决:
清单 3. 安装一个典型的包
% easy_install SQLObject Searching for SQLObject Reading http://www.python.org/pypi/SQLObject/ Reading http://sqlobject.org Best match: SQLObject 0.7.0 Downloading http://cheeseshop.python.org/packages/2.4/S/ SQLObject/SQLObject-0.7.0-py2.4.egg#md5=71830b26083afc6ea7c53b99478e1b6a Processing SQLObject-0.7.0-py2.4.egg creating /sw/lib/python2.4/site-packages/SQLObject-0.7.0-py2.4.egg Extracting SQLObject-0.7.0-py2.4.egg to /sw/lib/python2.4/site-packages Adding SQLObject 0.7.0 to easy-install.pth file Installing sqlobject-admin script to /sw/bin Installed /sw/lib/python2.4/site-packages/SQLObject-0.7.0-py2.4.egg Processing dependencies for SQLObject Searching for FormEncode>=0.2.2 Reading http://www.python.org/pypi/FormEncode/ Reading http://formencode.org Best match: FormEncode 0.5.1 Downloading http://cheeseshop.python.org/packages/2.4/F/ FormEncode/FormEncode-0.5.1-py2.4.egg#md5=f8a19cbe95d0ed1b9d1759b033b7760d Processing FormEncode-0.5.1-py2.4.egg creating /sw/lib/python2.4/site-packages/FormEncode-0.5.1-py2.4.egg Extracting FormEncode-0.5.1-py2.4.egg to /sw/lib/python2.4/site-packages Adding FormEncode 0.5.1 to easy-install.pth file Installed /sw/lib/python2.4/site-packages/FormEncode-0.5.1-py2.4.egg
正如可以从这些消息中看到的一样,easy_install 要在 http://www.python.org/pypi/ 上查找有关这个包的信息,然后查找真正可以下载它的地方(此处 egg 包就在 cheeseshop.python来源gaodai#ma#com搞@@代~&码*网.org 上;后面将介绍有关 egg 的更多前端的相关知识。例如,假设您现在有一个发行版(可以是首选的 egg 格式或另外一种归档类型),您就可以使用一个命令将这个归档文件和元数据上载到 Cheeseshop 上。显然,完整的 setup.py 脚本应该包含旧版本 distutils 脚本中所包含的同样详细的元数据;为了简单起见,本文跳过了这些内容,但是其参数名与 distutils 是兼容的。
尽管要完全适应 setuptools 所提供的巨大功能需要一些时间,但是实际上它确实可以让维护您自己的包和安装外来包都要比 distutils 更加简单。如果您所关心的内容仅仅是安装包,那么您所需要了解的内容在本文的介绍中已经全部包括了;只是您在描述您自己的包时可能会发现一些复杂性,不过仍然没有使用 distutils 那么复杂。
以上就是在Python的setuptools框架下生成egg的教程的详细内容,更多请关注gaodaima搞代码网其它相关文章!