使用Python以來,基本不可回避的就是setup.py文件,由于我們要安裝各種各樣的python軟件或其它第3方package,但是常常使用python setup.py install進行安裝,卻不甚明白該文件的工作原理。由于目前工作觸及了openstack,1個基于python的云操作系統(tǒng),因此,理解1些python的基本知識是必須要的。故找時間了解了基本的python setup.py文件的制作。
1、1個簡單的setup.py文件:
比如,我們常常使用的1個SSH的package:paramiko,其用于建立基于ssh協(xié)議的會話,下載地址為:https://github.com/paramiko/paramiko。
打開其中的setup.py文件,簡單注釋,以下所示:
Setup腳本是利用distutils進行編譯、發(fā)包、安裝模塊的主要腳本。Setup主要的目的是將我們的發(fā)布包依照distutils描寫的方式組織,方便開發(fā)安裝。
其實,在setup.py文件中,主要包括以下內(nèi)容:
S1、列出所有的packages,使用關鍵字packages和package_dir兩個;
S2、列出所有的依賴模塊,使用py_modules;
S3、列出擴大模塊,包括擴大名和包、源代碼文件、預處理選項如include、library選項,和其它的1些選項;
S4、文件發(fā)布版與依賴包的關系,使用==、>=、!=、<等
S5、直接安裝scripts文件,使用scripts關鍵字;
S6、安裝package data,使用package_data;
S7、安裝1些其他文件,使用data_files;
S8、額外的meta-data數(shù)據(jù),包括version、name、author、classifiers等,網(wǎng)址上介紹了meta-data數(shù)據(jù)的東西,這個是setup.py文件中必須的參數(shù):
上面的(1)表示該字段是setup文件中必須的。這個就是我們當前的setup文件的編排格式。
2、setup文件使用:
理解了setup.py文件里面的字段含義,那末我們就能夠學習setup文件的使用了,其主要有以下幾種方式:
python setup.py build #編譯
python setup.py install #安裝,最基本的安裝方式
python setup.py sdist #制作分發(fā)包,制作1個源碼包,格式為zip/tar.gz
python setup.py bdist_egg #制作1個2進制分發(fā)包
python setup.py bdist_wininst #制作windows下的分發(fā)包,exe程序
python setup.py bdist_rpm #制作linux下的rpm包,需要rpm程序支持
下面我們開始編寫1個setup.py文件,內(nèi)容以下:
履行python setup.py sdist后,會生成1個文件包,里面會有對應的源碼包:
到時候,客戶端拿到這個緊縮包后,解壓,并履行python setup.py install就能夠進行安裝。
3、setup.cfg文件:
Stackflow上的解釋:
http://stackoverflow.com/questions/27077355/how-to-use-setup-cfg-instead-of-setup-py-with-python⑵⑺
The problem is that the setup.cfg file does not do what you want. It does not provide parameters to the setup function. It is used to supply parameters to the commands that setup.py makes available. You can list the supported commands with setup.py --help-commands. You should see something like:
Setup.cfg其實不是setup函數(shù)中的參數(shù),而是setup.py文件中的1些參數(shù),可使用setup.py --help-commands命令查看:
這只是python setup.py的參數(shù),但是這其實不是直接需要寫入setup.cfg文件中的。具體的,還要再繼續(xù)查看,比如,sdist命令可以使用的參數(shù)以下:
可以看到,當我們需要制作源碼的時候,可使用verbose、quiet等參數(shù),這就是我們需要寫入setup.cfg文件中的。
而setup.cfg的文件中是依照section去處理的,比如:
比如,當我們setup.cfg中以下時:
當我們履行python setup.py build安裝的時候,實際履行的是以下命令:
參考:https://docs.python.org/2/install/index.html#distutils-configuration-files
4、distutils介紹:
setuptool通過封裝distutils,簡化了package的安裝進程。Distutils,全稱為:Python
Distribution Utilities,從python 1.6以來,distutils已成為python標準庫的1部份,極大的簡化了用戶安裝新模塊、第3方包和標準工具,并且創(chuàng)建這些distribution的方式也極大的簡化了。Distutils既為支持RPM的linux提供了創(chuàng)建RPM的方式,也提供了制作windows exe的方式。Distutils通過將setup.py、setup.cfg、source code、第3方編譯包集成在1起,做成可用的package。
Distutils統(tǒng)1了linux和windows下python的安裝方式,其實不辨別是rpm包還是tarball方式,只是履行python setup.py install便可進行安裝。并且,可以令不同的開發(fā)者向同1塊package進行工作。
1般來說,我們會順次履行build和install,其中build會將所有的源文件進行編譯,并放到同對應目錄下,生成build/lib文件,源文件不限于python,也能夠是C/C++。如果斟酌到build的速度,可使用--buuld-base指定build的目錄。編譯完成后,使用install安裝,安裝的進程,是將該目錄下的文件拷貝到對應的代碼目錄下。
我們默許的安裝目錄是:
如果是默許的話,1般是標準的python安裝目錄,linux下1般prefix和exec-prefix是/usr,而windows下是C:\Program Files\Python,可以采取以下方式查詢安裝目錄:
我們可使用以下參數(shù)去指定install的方式:
S1、--user:linux下的用戶選擇,確保該用戶對安裝目錄有權限;
S2、--home:指定安裝目錄:
可以與--install-purelib、--install-scripts、--install-platlib、--install-data組合使用,確認各個子條目的安裝目錄。
S3、--prefix
上一篇 Qt之pro配置詳解
下一篇 識別喜歡開發(fā)的程序員