转载请注明出处:http://mageedu.blog.51cto.com,谢谢!
一、基本安装
Python Distribution Utilities(Distutils)在Python 2.0时引入,其极大地方便了对第三方模块的管理。通常,模块作者提供的模块可能会以不同的形式出现,这其中,最易于安装的莫过于操作系统上对应的安装包,如Windows上的exe或msi,以及基于RPM的Linux发行版(如Redhat/CentOS/SuSE等)上的rpm格式的包。然而,模块的最常见形式应该是源码包,如果其是使用Distutils遵循标准格式进行的封包,安装起来也很简单。在类Unix操作系统上,使用“python setup.py install”即可安装,在Windows系统上,只需要在“cmd”中执行“setup.py install”命令即可。
“setup.py install”的执行过程包含两个阶段:build和install。事实上,出于定制等目的,此两个阶段可以分别进行:首先执行“python setup.py build”进行编译,而后再执行“python setup.py install”进行安装。不过,此时的install阶段仍然会显示执行build的过程,虽然其并未执行任何多余的操作。
“python setup.py build”编译过程直接在源码目录下进行,如果想保持源码的整洁,也可以通过“python setup.py build --build-base=/path/to/pybuild”命令将编译的结果保存至额外指定的路径下。编译完成后,在目标路径下会用一个名为“lib”或“lib.<platform>”的目录来保存即将安装的模块文件,其中“lib”用于完全用python语言开发的模块,而“lib.<platform>”通常用于基于C/C++开发的模块。
“python setup.py install”实现的安装过程非常简单,其仅是将编译好的文件复制到指定的模块安装目录中。在未指定安装目录时,模块的安装目录为默认,其名称通常为“site-packages”,其具体位置可以在python环境中进行查看,例如在Windows系统上查看的如下所示的结果中的“C:\\Python27\\lib\\site-packages”。
>>> import sys
>>> sys.path
['', 'C:\\Windows\\system32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages']
CentOS 6.5 x86_64系统自带的python环境显示结果则要复杂一些,如下所示。
>>> sys.path
['', '/usr/lib64/python26.zip', '/usr/lib64/python2.6', '/usr/lib64/python2.6/plat-linux2', '/usr/lib64/python2.6/lib-tk', '/usr/lib64/python2.6/lib-old', '/usr/lib64/python2.6/lib-dynload', '/usr/lib64/python2.6/site-packages', '/usr/lib64/python2.6/site-packages/gtk-2.0', '/usr/lib/python2.6/site-packages', '/usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info']
二、自定义安装
2.1 自定义模块的安装基准目录
实践中,将第三方模块安装在非默认目录下也是比较常见的需求,而Distutils的install命令为此也专门提供了相应的处理机制。
对于无法在全局site-packages目录写入文件的普通用户来说,可以为install命令指定“--user”选项将模块安装至用户家目录中相应的位置(类Unix系统通常为USER_BASE/lib/pythonX.Y/site-packages)。
如果出于仅以自用的目的想把模块安装至某特定路径下,可以为install命令指定“--home=<dir>”选项。不过,如果想让python使用此模块,需要为python解释器指定搜索路径,或通过编译sitecustomize来调用site.addsitedir(),也可以通过编辑sys.path的值来实现。
此外,常见于一些Linux发行版中,python会安装在/usr路径下,如果需要将第三方模块在安装于/usr/local而非默认的/usr路径下,则需要使用“--prefix”或“--exec-prefix”选项。其中,“--prefix”用于指定安装目录,而“--exec-prefix”用于指定平台特有的文件(例如C库)的安装目录,省略“--exec-prefix”时,其默认为“--prefix”指定的位置。查看当前系统python的默认prefix,可以通过如下方式进行。
>>> import sys
>>> sys.prefix
'/usr'
2.2 安装路径的深度定制
在安装第三方模块时,其会自动在安装基准目录中使用不同的目录来分别存储如python模块、扩展模块、可执行文件、数据及C头文件等几种不同类别的文件。如果需要对此些子目录进行定制,可以使用相应的选项进行:
python模块:--install-purelib=/path/to/somewhere
扩展模块: --install-platlib=/path/to/somewhere
所有模块(即不区分python模块或扩展模块): --install-lib=/path/to/somewhere
可执行文件: --install-scripts=/path/to/somewhere
数据文件: --install-data=/path/to/somewhere
C头文件: --install-headers=/path/to/somewhere
这些路径可以使用相对路径或绝对路径。不过,使用--install-lib会覆盖--instal-purelib或--install-platlib指定的位置。例如下面的安装命令。
python setup.py install --home=~ \
--install-purelib=python/lib \
--install-platlib=python/lib.$PLAT \
--install-scripts=python/scripts
--install-data=python/data
如果需要为每一个安装的第三方模块都指定为特定的安装方案,也可以通过编辑Distutils的配置文件中[install]段的参数来统一定义,例如:
[install]
install-base=$HOME/python
install-purelib=lib
install-platlib=lib.$PLAT
install-scripts=scripts
install-data=data
参考文献:python官方文档