天天看點

linux第三方子產品參數,為Python安裝第三方子產品

一、基本安裝

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.”的目錄來儲存即将安裝的子產品檔案,其中“lib”用于完全用python語言開發的子產品,而“lib.”通常用于基于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=

此外,常見于一些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官方文檔