第三方包

从一开始,如果要做一些实际Python开发,你一定会用到一些第三方包。

在Linux系统上至少有3种安装第三方包的方法。

  • 使用系统自带的包管理系统(deb,rpm,等)
  • 通过社区开发的各种工具,例如pipeasy_install
  • 从源文件安装

这三个方面,几乎完成同样的事情。即:安装依赖,编译代码(如果需要的话),将一个包含模块的包复制的标准软件包搜索位置。

第二步和第三步在所有的操作系统上基本相同。
我再次希望您可以在 Stack Overflow 上找到你的平台的第三方包安装方法。

在哪找第三方包?

在安装第三方包之前,你首先要找到他们。以下是几种方法:

通过发行版专用包安装

通过包管理器安装包安装包就像使用命令行或者GUI安装别的软件那样简单。
例如在Ubuntu中安装 simplejson

  1. $ sudo apt-get install python-simplejson

通过pip安装

easy_install渐渐不再流行。我们将主要介绍pip,它是easy_install的一个替代品。

pip是一个用来安装和管理Python包的工具,就如同Python Packet Index一样。
pip并没有随着Python一起安装,因此我们需要先安装它。Linux下,一般这样安装:

  1. $ sudo apt-get install python-pip

在安装任何其他包之前,我总是通过PyPI将pip升级到最新版本的,
Ubuntu软件库中的版本普遍落后的PyPI。我通过pip升级pip它自己。

  1. $ sudo pip install pip --upgrade

现在如果需要安装任何包,你可以运行 pip install package-name 命令。
所以可以通过下面命令安装 simplejson:

  1. $ sudo pip install simplejson

删除包也很简单。

  1. $ sudo pip uninstall simplejson

一般情况下, pip 会从PyPI自动安装最新的稳定版,
但有时我们需要安装一个特定版本的包,因为你的项目可能基于特殊的版本。
因此你可能需要使用类似如下的 pip install 命令:

  1. $ sudo pip install simplejson==2.2.1

我们可能需要升级/降级/重新安装包。此时可以通过下面的命令完成:

  1. $ sudo pip install simplejson --upgrade # Upgrade a package to the latest version from PyPI
  2. $ sudo pip install simplejson==2.2.1 --upgrade # Upgrade/downgrade a package to a given version

现在,如果你想安装一个处于开发版本的包,它在版本控制仓库有,但是PyPI中还没有怎么办?
pip 能够很好的处理这种情况,但在这之前,你需要自己安装这个版本控制仓库。Ubuntu下,你可以如下安装:

  1. $ sudo apt-get install git-core mercurial subversion

安装版本控制仓库之后,从版本控制仓库安装包就如下所示:

  1. $ sudo pip install git+http://hostname_or_ip/path/to/git-repo#egg=packagename
  2. $ sudo pip install hg+http://hostname_or_ip/path/to/hg-repo#egg=packagename
  3. $ sudo pip install svn+http://hostname_or_ip/path/to/svn-repo#egg=packagename

你也可以同样简单的从本地仓库安装,注意下面的三斜杠是文件目录。

  1. $ sudo pip install git+file:///path/to/local/repository

有一点需要注意,如果使用 git 协议安装,你需要使用 git+git 前缀:

  1. $ sudo pip install git+git://hostname_or_ip/path/to/git-repo#egg=packagename

现在你可能会好奇这些 egg 会被怎么使用。
现在你需要明白的是一个egg是一个被压缩的Python包,里面包含了源代码和一些元数据。
pip 在安装包前建立了egg信息。你可以在代码仓库的 setup.py 文件中找到egg名字。
找到 setup 块然后找到类似于 name="something" 的字段。
它可能看起来就像如下的代码(这段代码从simplejson的 srtup.py 得到)一样。

  1. setup(
  2.  
  3. name="simplejson", # <--- This is your egg name
  4.  
  5. version=VERSION,
  6.  
  7. description=DESCRIPTION,
  8.  
  9. long_description=LONG_DESCRIPTION,
  10.  
  11. classifiers=CLASSIFIERS,
  12.  
  13. author="Bob Ippolito",
  14.  
  15. author_email="bob@redivi.com",
  16.  
  17. url="http://github.com/simplejson/simplejson",
  18.  
  19. license="MIT License",
  20.  
  21. packages=['simplejson', 'simplejson.tests'],
  22.  
  23. platforms=['any'],
  24.  
  25. **kw)

如果没有 setup.py 文件咋办?这样如何找到egg名?其实我们不需要。
把包源码拷贝到你的工程目录下,然后导入进去就可以直接用了。

—user 选项

上面的所有例子把包都安装到系统范围。如果你在 pip install 时使用 —user 选项,包将被安装到 ~/.local 目录下。在我的机子上,如下所示:

  1. $ pip install --user markdown2
  2.  
  3. Downloading/unpacking markdown2
  4.  
  5. Downloading markdown2-1.0.1.19.zip (130Kb): 130Kb downloaded
  6.  
  7. Running setup.py egg_info for package markdown2
  8.  
  9.  
  10.  
  11. Installing collected packages: markdown2
  12.  
  13. Running setup.py install for markdown2
  14.  
  15. warning: build_py: byte-compiling is disabled, skipping.
  16.  
  17.  
  18.  
  19. changing mode of build/scripts-2.7/markdown2 from 664 to 775
  20.  
  21. warning: install_lib: byte-compiling is disabled, skipping.
  22.  
  23.  
  24.  
  25.  
  26.  
  27. changing mode of /home/mir/.local/bin/markdown2 to 775
  28.  
  29. Successfully installed markdown2
  30.  
  31. Cleaning up...

注意: markdown2 被安装到 /home/mir/.local/bin/markdown2 这个目录下。

有很多原因使你不想将包安装到系统目录中。
稍后我将讲解如何对于每个项目设置独立的Python环境。

从源码安装

从源码安装包仅仅需要一个命令,解压这个包到一个目录,然后执行下面的命令。

  1. cd /path/to/package/directory
  2.  
  3. python setup.py install

尽管这些安装的办法并没有什么不同,但 pip 方式是最好的。
pip 让你拥有轻松升级/降级包的能力,而手动安装你就不得不去手动下载,解压的安装。
手动安装包应该使你最后一个选择,如果别的全部失败了(一般不太可能)。

安装需要编译的包

我们现在已经了解了大多数包的安装方法,但有些包还没有介绍:包含C/C++代码的Python包,它们需要在安装前被编译。
关于这些包最好的例子是数据库适配器,图片处理库等。

虽然 pip 可以处理编译安装的源码,但我个人更喜欢使用发行版的包管理器提供的包。
它将会安装编译好的二进制文件。

如果你还是想用 pip 安装,下面是在Ubuntu系统上需要做的。

编译器的相关工具:

  1. $ sudo apt-get install build-essential

Python开发环境(头文件等):

  1. $ sudo aptitude install python-dev-all

如果你的系统没有 python-dev-all ,看看这些相似的名字 python-dev , python2.X-dev 等等。

确保你已经安装了 psycopg2 (PostgreSQL RDBMS adapter for Python),你将需要PostgreSQL的开发文件。

  1. $ sudo aptitude install postgresql-server-dev-all

完成这些依赖的安装后,你就能运行 pip install 了。

  1. $ sudo pip install psycopg2

还需要注意一点: 并不是所有的包都能通过pip编译安装!
但如果你对编译安装很有自信,或者已经对于如何在自己的目标平台安装有足够的经验。
那就大胆的手动安装吧!