首页 > 代码库 > Python的包管理工具distribute,setuptools,easy_install与pip

Python的包管理工具distribute,setuptools,easy_install与pip

        刚开始学习Python时,看资料和别人介绍中提到过,安装Python的包有的用easy_install, setuptools, 有的使用pip,distribute。现在把这些相关的资料整理一下,能更清晰的了解Python的设计,关于这些可以参考http://guide.python-distribute.org/installation.html。


1.distutils

        Python 自带的基本安装工具,适用于非常简单的应用场景。

2.distribute

        通过查阅Distribute的文档 https://pythonhosted.org/distribute/ 可知,目前它是 setuptools 的一个弃用版本。自从 setuptools0.7 发布之后,这两种工具已经合并,并且distribute也就没有再被提起过了。不过由于 setuptools 不支持 Python3 ,故在将来, distribute 将会有很大程序的优化和完善。

3.setuptools

        现在我们只要重点关注 setuptools 的使用就好了,它的官方文档 https://pythonhosted.org/setuptools/ 。 setuptools 是 Python Enterprise Application Kit(PEAK)的一个副项目,它是一组 Python 的 distutilsde 工具的增强工具(适用于 Python 2.3.5 以上的版本,64 位平台则适用于 Python 2.4 以上的版本),可以让程序员更方便的创建和发布 Python 包,特别是那些对其它包具有依赖性的状况。

3.1 优点

        相比 Python 自带的用于发布 Python 应用程序的模块 distutils,setuptools 的真正优点并不在于实现distutils 所能实现的功能——尽管它的确增强了distutils的功能并简化了 setup.py 脚本中的内容。setuptools 最大的优势是它在包管理能力方面的增强。它可以使用一种更加透明的方法来查找、下载并安装依赖包;并可以在一个包的多个版本中自由进行切换,这些版本都安装在同一个系统上;也可以声明对某个包的特定版本的需求;还可以只使用一个简单的命令就能更新到某个包的最新版本。给人印象最为深刻的是,即使有些包的开发人员可能还从未考虑过任何 setuptools 兼容性问题,我们依然可以使用这些包。

3.2 特性

        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.3 安装

        Pypi源:https://pypi.python.org/pypi/setuptools 

3.3.1 windows 

        方法a:下载.exe文件,安装完成之后在Python安装目录下的Scripts目录下就会有easy_install.exe,将Scripts加到Path变量里,就可以使用它来安装Python包了,只需要将包名作为参数,它就会自动到Pypi里去查找并安装。
        方法b:下载ez_setup.py https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py 然后在命令行运行:python ez_setup.py进行安装。安装效果应该是和方法a是一样的,不过根据官网的文档,对于64位的机器,只能使用第二种方式进行安装。

3.3.2 Unix

        Debian/Ubuntu系统可以直接使用apt-get安装:
sudo apt-get install python-setuptools
        RedHat/Centos系统可以直接使用yum安装:
yum install setuptool
        方法a:通过引导程序 ez_setup.py 来安装。这个引导程序会联网下载最新版本 setuptools 来安装,同时也可以更新本地的 setuptools。
wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
sudo python ez_setup.py
        更新setuptools:
sudo python ez_setup.py -U setuptools
        方法b:下载setuptools的egg包,然后通过sh安装。
wget https://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg
sudo sh setuptools-0.6c11-py2.6.egg
        方法c:源码编译安装
wget https://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz
tar zxvf setuptools-0.6c11.tar.gz
cd setuptools-0.6c11
python setup.py install

4.easy_install

        它是setuptools 和 distribute 自带的安装脚本,也就是一旦 setuptools 或 distribute 安装完毕, easy_install 也便可用. 最大的特点是自动查找 Python 官方维护的包源 PyPI , 安装第三方 Python 包非常方便。

5.pip

        pip 是一个安装和管理 Python 包的工具,是 easy_install 的一个替换品。pip 的目标非常明确 – 取代 easy_install. easy_install 有很多不足: 安装事务是非原子操作,只支持 svn,没有提供卸载命令,安装一系列包时需要写脚本; pip 解决了以上问题,已俨然成为新的事实标准.
        Pypi源:https://pypi.python.org/pypi/pip,pip的安装详情可以参考http://www.pip-installer.org/en/latest/
        下面大致介绍一下pip的快速安装:

        下载 get-pip.py :

wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py

        运行:
python get-pip.py
        (如果setuptools or distribute 没有安装,get-pip.py会自动安装setuptools)

        如果更新setuptools,运行:

pip install -U setuptools

在 Linux:
pip install -U pip
在 Windows :
python -m pip install -U pip

Debian/Ubuntu系统可以直接使用apt-get安装:
sudo apt-get install python-pip
Fedora/RedHat/Centos系统可以直接使用yum安装:
sudo yum install python-pip 

Python的包管理工具distribute,setuptools,easy_install与pip