Python中setuptools做什么用的?


概括

setuptools是 Python Enterprise Application Kit(PEAK)的一個副項目,它 是一組Python的 distutilsde工具的增強工具(適用於 Python 2.3.5 以上的版本,64 位平台則適用於 Python 2.4 以上的版本),可以讓程序員更方便的創建和發布 Python 包,特別是那些對其它包具有依賴性的狀況。

1.簡介

經常接觸Python的同學可能會注意到,當需要安裝第三方python包時,可能會用到 easy_install命令。 easy_install是由PEAK(Python Enterprise Application Kit)開發的setuptools包里帶的一個命令,所以使用easy_install實際上是在調用setuptools來完成安裝模塊的工作。
Perl 用戶比較熟悉 CPAN,而 Ruby 用戶則比較熟悉 Gems;引導 setuptools 的 ez_setup 工具和隨之而生的擴展后的 easy_install 與 “Cheeseshop”(Python Package Index,也稱為 “PyPI”)一起工作來實現相同的功能。它可以很方便的讓您自動下載,編譯,安裝和管理Python包。
 

2.優點

相比Python 自帶的用於發布 Python 應用程序的模塊distutils,setuptools 的真正優點並不在於實現distutils 所能實現的功能——盡管它的確增強了distutils的功能並簡化了setup。py腳本中的內容。setuptools 最大的優勢是它在包管理能力方面的增強。它可以使用一種更加透明的方法來查找、下載並安裝依賴包;並可以在一個包的多個版本中自由進行切換,這些版本都安裝在同一個系統上;也可以聲明對某個包的特定版本的需求;還可以只使用一個簡單的命令就能更新到某個包的最新版本。給人印象最為深刻的是,即使有些包的開發人員可能還從未考慮過任何 setuptools 兼容性問題,我們依然可以使用這些包。
特性  
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.安裝

 

使用ez_setup。py安裝

這是 setuptools 自豪的一種安裝方式,只需要一個大約 8K 作為的腳本ez_setup。py,就能自動為用戶安裝包括 setuptools 自身在內的許多 Python 包。
使用這種方式,用戶只需要下載 ez_setup。py 並運行,就可以自動下載和安裝適合用戶當前 Python 版本的適當的 setuptools egg 文件(當然,用戶需要 Python 2.3.5 以上的版本,64 位操作系統的用戶則需要 Python 2.4 以上的版本)。此外,這段腳本還會將可執行的  easy_install 腳本安裝到用戶所有的操作系統 Python 可執行腳本正常應該安裝的位置(例如,Windows 用戶會安裝到 Python  安裝目錄下的 Scripts 目錄中)。關於這種安裝方法的更詳細說明和注意事項,請參考其官方說明(見擴展閱讀)。簡單的安裝命令如下:
wget -q ez_setup。py下載地址(見擴展閱讀) 安裝完后,最好確保
 

使用完整的安裝包安裝

當然,用戶也可以使用 setuptools 在 Python Cheese Shop 上發布的合適的完整的發布版本來安裝。對於使用 Windows 的用戶,這也是挺方便的方法,。
許多 Linux 發行版的官方包管理倉庫都包含 setuptools 的某個版本。例如,如果你跟我一樣使用 Ubuntu ,那安裝 setuptools 只是簡單的進行如下操作:
# apt-get install python-setuptools
 

4. 使用方法

使用方法非常簡單,在命令行輸入“easy_install 參數”即可。

a、通過模塊名稱來安裝。setuptools會自動搜索PyPI 以查找最新版本的模塊。如果找到的話,她會自動下載、編譯和安裝:

  例如:easy_install SQLObject

說明,安裝過程可能需要權限,如果是ubuntu的話,可以加上sudo

b、指定查找頁面("download page")來使用名稱和版本信息來安裝或升級一個模塊:

  easy_install -f http://pythonpaste.org/package_index.html SQLObject

c、從指定模塊下載地址來下載模塊源碼並在下載成功之后編譯安裝

  easy_install http://example.com/path/to/MyPackage-1.2.3.tgz

d、在本地已經存在的egg文件基礎上來安裝模塊

  easy_install /my_downloads/OtherPackage-3.2.1-py2.3.egg

e、升級一個已經安裝的模塊到最新版本,如果在PyPI中這個模塊有最新版本。

  easy_install --upgrade PyProtocols

f、從源碼中安裝模塊(源碼已經下載並解壓到當前文件夾下)(New in 0.5a9)

  easy_install .

g、模塊卸載 easy_install -m package-name (比如easy_install -m pylab)

如果想刪除通過easy_install安裝的軟件包,比如說:MySQL-python,可以執行命令:

easy_install -m MySQL-python

注:此操作會從easy-install.pth文件里把MySQL-python的相關信息抹去,剩下的egg文件,你可以手動刪除。

 5. 其他

更多easyinstall的使用方法參考Easyinstall官方文檔

注:通過easy_install安裝軟件,相關安裝信息會保存到easy-install.pth文件里,路徑類似如下形式:

   Windows:C:\Python25\Lib\site-packages\easy-install.pth

   Linux:/usr/local/lib/python25/site-packages/easy-install.pth

4、相關資源

a、setuptools模塊下載地址:http://pypi.python.org/pypi/setuptools

b、setuptools在線文檔:http://peak.telecommunity.com/DevCenter/setuptools

c、Easy install在線文檔:http://peak.telecommunity.com/DevCenter/EasyInstall

d、可愛的 Python: 使用 setuptools 孵化 Python egghttp://www.ibm.com/developerworks/cn/linux/l-cppeak3.html

f、ez_setup.py腳本:http://peak.telecommunity.com/dist/ez_setup.py

 

以上是python下setuptools的簡介 。

 

6. 關於 egg 
egg 是一個包含所有包數據的文件包。在理想情況中,egg 是一個使用 zip 壓縮的文件,其中包括了所有需要的包文件。但是在某些情況下,setuptools 會決定(或被開關告知)包不應該是 zip 壓縮的。在這些情況下,egg 只是一個簡單的未曾壓縮的子目錄,但是里面的內容是相同的。使用單一的版本可以方便地進行轉換,並可以節省一點磁盤空間,但是 egg 目錄從功能和組織結構上來說都是相同的。一直使用 JAR 文件的 Java? 技術的用戶會發現 egg 非常熟悉


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM