概括

setuptools是 Python Enterprise Application Kit(PEAK)的一个副项目,它 是一组Python的 distutilsde工具的增强工具(适用于 Python 2.3.5 以上的版本,64 位平台则适用于 Python 2.4 以上的版本),可以让程序员更方便的创建和发布 Python 包,特别是那些对其它包具有依赖性的状况。

1.简介

经常接触Python的同学可能会注意到,当需要安装第三方python包时,可能会用到easy_install命令。easy_install是由PEAK(Python Enterprise Application Kit)开发的setuptools包里带的一个命令,所以使用easy_install实际上是在调用setuptools来完成安装模块的工作。
Perl 用户比较熟悉 CPAN,而 Ruby 用户则比较熟悉 Gems;引导 setuptools 的 ez_setup 工具和随之而生的扩展后的easy_install 与 “Cheeseshop”(Python Package Index,也称为 “PyPI”)一起工作来实现相同的功能。它可以很方便的让您自动下载,编译,安装和管理Python包。
 

2.优点

相比Python 自带的用于发布 Python 应用程序的模块distutils,setuptools 的真正优点并不在于实现distutils 所能实现的功能——尽管它的确增强了distutils的功能并简化了setup。py脚本中的内容。setuptools 最大的优势是它在包管理能力方面的增强。它可以使用一种更加透明的方法来查找、下载并安装依赖包;并可以在一个包的多个版本中自由进行切换,这些版本都安装在同一个系统上;也可以声明对某个包的特定版本的需求;还可以只使用一个简单的命令就能更新到某个包的最新版本。给人印象最为深刻的是,即使有些包的开发人员可能还从未考虑过任何 setuptools 兼容性问题,我们依然可以使用这些包。
特性  
a. 在构建时使用 EasyInstall 工具自动查找、下载、安装、升级所依赖的软件包,EasyInstall 支持通过HTTP、 FTP、 Subversion 以及 SourceForge 下载软件包,并能自动扫描 PyPI 上的网页以找到下载链接。(对于熟悉 Perl 的用户, PyPI 是 Python 领域最接近的 CPAN了)
b. 创建 Python Eggs,一种单文件的可导入的发布格式。
c. 在包中的目录中可以包含数据文件,允许代码访问这些数据文件。(Python 2.4 distutils 也支持这个特性,不过 setuptools 能为面向 Python 2.3 的包也提供这样的特性,此外还支持访问压缩包中的数据。)
d. 自动包含程序员的源代码树中的所有包,而不需要在独立的setup。py中逐个声明。
e. 自动在源代码发布中包含所有相关的文件,而无需创建MANIFEST。in文件,也不必在源代码树改变后强制生成 MANIFEST。
f. 自动为程序员项目中的任意数量的“main”函数生成封装脚本或者 Windows (控制台或者图行用户界面) .exe 文件。(注:这并不是 py2exe 的替代方案;这里生成的 .exe 需要基于已安装的 Python,而 py2exe 则不需要。)
g. 透明的 Pyrex(Pyrex 允许程序员编写混合 Python 和 C 数据类型的代码,并编译为 Python 的 C 扩展。)支持,这样程序员的 setup。py 得以列出 .pyx 文件并且即使最终用户没有安装 Pyrex 也能够运行(当然这需要程序员在源代码发布包中包含 Pyrex 生成的 C 代码)。
h. 对创建命令行别名的支持,setuptools 可以帮助程序员为发布包创建项目需要的、每个用户或者全局的快捷方式,这通常用于命令行或选项中。
i. 上传发布包到 PyPI 的支持,setuptools 可以帮助程序员将源码包或者 eggs 发布到 PyPI 上。
j. 可以以“开发模式”发布程序员的项目,这样它可以出现在 sys.path 中,而程序员依然可以直接编辑源代码的工作副本。
k. 方便的为 distutils 扩展新功能或者 setup() 参数,并能够发布可供不同的项目重复使用的扩展包,而无需复制代码。
l. 创建具有自动发现扩展功能的可扩展的应用程序或框架,只要在项目的安装脚本中简单的声明“入口点(entry points)”即可。
 

3.安装

使用ez_setup。py安装

这是 setuptools 自豪的一种安装方式,只需要一个大约 8K 作为的脚本ez_setup。py,就能自动为用户安装包括 setuptools 自身在内的许多 Python 包。
使用这种方式,用户只需要下载 ez_setup。py 并运行,就可以自动下载和安装适合用户当前 Python 版本的适当的 setuptools egg 文件(当然,用户需要 Python 2.3.5 以上的版本,64 位操作系统的用户则需要 Python 2.4 以上的版本)。此外,这段脚本还会将可执行的 easy_install 脚本安装到用户所有的操作系统 Python 可执行脚本正常应该安装的位置(例如,Windows 用户会安装到 Python 安装目录下的 Scripts 目录中)。关于这种安装方法的更详细说明和注意事项,请参考其官方说明(见扩展阅读)。简单的安装命令如下:
wget -q ez_setup。py下载地址(见扩展阅读) 安装完后,最好确保
 

使用完整的安装包安装

当然,用户也可以使用 setuptools 在 Python Cheese Shop 上发布的合适的完整的发布版本来安装。对于使用 Windows 的用户,这也是挺方便的方法,。
许多 Linux 发行版的官方包管理仓库都包含 setuptools 的某个版本。例如,如果你跟我一样使用 Ubuntu ,那安装 setuptools 只是简单的进行如下操作:
# apt-get install python-setuptools
 

4. 使用方法

使用方法非常简单,在命令行输入“easy_install 参数”即可。

a、通过模块名称来安装。setuptools会自动搜索PyPI 以查找最新版本的模块。如果找到的话,她会自动下载、编译和安装:

  例如:easy_install SQLObject

说明,安装过程可能需要权限,如果是ubuntu的话,可以加上sudo

b、指定查找页面("download page")来使用名称和版本信息来安装或升级一个模块:

  easy_install -f http://pythonpaste.org/package_index.html SQLObject

c、从指定模块下载地址来下载模块源码并在下载成功之后编译安装

  easy_install http://example.com/path/to/MyPackage-1.2.3.tgz

d、在本地已经存在的egg文件基础上来安装模块

  easy_install /my_downloads/OtherPackage-3.2.1-py2.3.egg

e、升级一个已经安装的模块到最新版本,如果在PyPI中这个模块有最新版本。

  easy_install --upgrade PyProtocols

f、从源码中安装模块(源码已经下载并解压到当前文件夹下)(New in 0.5a9)

  easy_install .

g、模块卸载 easy_install -m package-name (比如easy_install -m pylab)

如果想删除通过easy_install安装的软件包,比如说:MySQL-python,可以执行命令:

easy_install -m MySQL-python

注:此操作会从easy-install.pth文件里把MySQL-python的相关信息抹去,剩下的egg文件,你可以手动删除。

 5. 其他

更多easyinstall的使用方法参考Easyinstall官方文档

注:通过easy_install安装软件,相关安装信息会保存到easy-install.pth文件里,路径类似如下形式:

Windows:C:\Python25\Lib\site-packages\easy-install.pth

Linux:/usr/local/lib/python25/site-packages/easy-install.pth

4、相关资源

a、setuptools模块下载地址:http://pypi.python.org/pypi/setuptools

b、setuptools在线文档:http://peak.telecommunity.com/DevCenter/setuptools

c、Easy install在线文档:http://peak.telecommunity.com/DevCenter/EasyInstall

d、可爱的 Python: 使用 setuptools 孵化 Python egghttp://www.ibm.com/developerworks/cn/linux/l-cppeak3.html

f、ez_setup.py脚本:http://peak.telecommunity.com/dist/ez_setup.py

以上是python下setuptools的简介 。

6. 关于 egg 
egg 是一个包含所有包数据的文件包。在理想情况中,egg 是一个使用 zip 压缩的文件,其中包括了所有需要的包文件。但是在某些情况下,setuptools 会决定(或被开关告知)包不应该是 zip 压缩的。在这些情况下,egg 只是一个简单的未曾压缩的子目录,但是里面的内容是相同的。使用单一的版本可以方便地进行转换,并可以节省一点磁盘空间,但是 egg 目录从功能和组织结构上来说都是相同的。一直使用 JAR 文件的 Java? 技术的用户会发现 egg 非常熟悉

Python中setuptools做什么用的?的更多相关文章

  1. 【原】关于Python中setuptools安装的问题

    在生成package的时候,需要在setup.py中引入setuptools包,可是却报告如下错误: ImportError: No module named setuptools 解决办法就是下载s ...

  2. 解决windows下 Python中 matplotlib 做图中文不显示的问题

    在代码中填入以下两句即可 from pylab import mpl mpl.rcParams['font.sans-serif'] = [font_name] 如:mpl.rcParams['fon ...

  3. Python爬虫学习(4): python中re模块中的向后引用以及零宽断言

    使用小括号的时候,还有很多特定用途的语法.下面列出了最常用的一些: 表4.常用分组语法 分类 代码/语法 说明 捕获 (exp) 匹配exp,并捕获文本到自动命名的组里 (?<name>e ...

  4. [Python]Python章1 Python中_的故事

    _xx 单下划线开头 Python中没有真正的私有属性或方法,可以在你想声明为私有的方法和属性前加上单下划线,以提示该属性和方法不应在外部调用.如果真的调用了也不会出错,但不符合规范. 本文为译文,版 ...

  5. python中继承和多态

    继承和多态 继承 引入继承 我们有这样一个需求 模仿英雄联盟定义两个英雄类 1.英雄要有昵称.攻击力.生命值属性 2.实例化出两个英雄对象 3.英雄之间可以互殴,被殴打的一方掉血,血量小于0则判断为死 ...

  6. python中list不能做索引

    先看python中内置的list不能作为字典的key. 可将list或者ndarray转化为tuple再做索引. list不能进行hash: import numpy as np a1 = np.ar ...

  7. Python中实现对list做减法操作介绍

    Python中实现对list做减法操作介绍 这篇文章主要介绍了Python中实现对list做减法操作介绍,需要的朋友可以参考下 问题描述:假设我有这样两个list, 一个是list1,list1 = ...

  8. python中的模块和包

    模块 一 什么是模块 模块就是一组功能的集合体,可以通过导入模块来复用模块的功能. 比如我在同一个文件夹定义两个.py文件,分别命名为A.py和B.py,那么可以通过在A文件里通过import B来使 ...

  9. [转]Python中的str与unicode处理方法

    早上被python的编码搞得抓耳挠腮,在搜资料的时候感觉这篇博文很不错,所以收藏在此. python2.x中处理中文,是一件头疼的事情.网上写这方面的文章,测次不齐,而且都会有点错误,所以在这里打算自 ...

随机推荐

  1. OpenCV从入门到放弃系列之——core模块.核心功能(一)

    Mat - 基本图像容器 世间的图像是各种各样的,但是到了计算机的世界里所有的图像都简化为了数值矩以及矩阵信息.作为一个计算视觉库,OpenCV的主要目的就是处理和操作这些信息,来获取更高级的信息,也 ...

  2. codeigniter nginx配置

    转载:http://www.nginx.cn/1134.html server{ listen 80; server_name www.ci.oa.com; access_log /usr/local ...

  3. 如何正确使用$_SERVER['DOCUMENT_ROOT']识别该路径的文件

    echo $_SERVER['DOCUMENT_ROOT']; 这时输出当前文件所在的路径 D:/phpStudy/WWW/study/php&mysql $_SERVER['DOCUMENT ...

  4. 关于margin的一些问题

    引 在平时处理样式的过程中,会出现各种问题.比如: 包含在父元素中的子元素设置了浮动,子元素高度变化的时候父元素的高度没有随着变化,就是没有被撑高,父元素仍然是原来设置的那个高度 包含在父元素中的子元 ...

  5. Linux搭建apache +PHP(CentOS系统)

    1.安装MySQL bash # sudo yum install mysql-server  (下载mysql) bash # service mysqld start (开启mysql服务) ba ...

  6. linux 基础知识

    一.命令的基本用法 (1).Linux里面的命令分为内置命令和独立的命令. (2).命令行的基本使用方法            Cli Syntax                    #命令和选项 ...

  7. git入门网站

    http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 git入门教程:对商业的.开源的. ...

  8. linux command

    ubuntu start network:sudo service network-manager start

  9. windows server 2003(64位)上利用iis6部署32位应用

    如果直接部署,会出现如下问题: 试图加载格式不正确的程序. (Exception from HRESULT: 0x8007000B) 解决办法 1.命令行键入: cscript.exe %SYSTEM ...

  10. (44) odoo中的WebService

    * 前言   erp系统会和其它系统进行对接,这时就要接口,官方给出的是两解决方案   * XML-RPCLibrary  举例    import xmlrpclib root = 'http:// ...