本文介紹了 setuptools 框架的內容,它是 PEAK 的一個副項目,它提供了比 distutils 更加簡單的包管理和發行功能。
開始
setuptools 模塊很會 “規避”。例如,如果我們下載一個使用 setuptools 而不是使用 distutils 構建的包,那么安裝就應該可以像我們期望的一樣工作:通常使用 python setup.py install 就可以。為了實現這種功能,使用 setuptools 綁定在一起的包就會在歸檔文件中包含一個很小的引導模塊 ez_setup.py。此處惟一需要注意的是 ez_setup.py 試圖在后臺下載并安裝所需要的 setuptools —— 當然,這需要有一個連接網絡的機器。如果 setuptools 早已在本地機器上安裝了,那么這個后臺步驟就不再需要執行;但是如果它需要手工進行安裝,那么很多透明性就都丟失了。不過,大部分系統現在都有一個 Internet 連接了;為沒有連接網絡的機器多執行幾個特殊步驟也并非特別麻煩。
setuptools 的真正優點并不在于實現 distutils 所能實現的功能 —— 盡管它 的確 增強了 distutils 的功能并簡化了 setup.py 腳本中的內容。setuptools 最大的優勢是它在包管理能力方面的增強。它可以使用一種更加透明的方法來查找、下載并安裝依賴包;并可以在一個包的多個版本中自由進行切換,這些版本都安裝在同一個系統上;也可以聲明對某個包的特定版本的需求;還可以只使用一個簡單的命令就能更新到某個包的最新版本。給人印象最為深刻的是,即使有些包的開發人員可能還從未考慮過任何 setuptools 兼容性問題,我們依然可以使用這些包。
下面讓我們詳細探討一下。
引導
工具 ez_setup.py 是一個簡單的腳本,它可以引導 setuptools 中其余部分。有點讓人困惑的是,完整 setuptools 包中所提供的 easy_install 腳本與 ez_setup.py 所實現的功能是相同的。不過前者假設 setuptools 早已安裝了,因此它會跳過幕后的安裝過程。這兩個版本都可以接受相同的參數和開關。
這個過程中的第一個步驟是下載一個小腳本 ez_setup.py:
清單 1. 下載引導腳本
% wget -q http://peak.telecommunity.com/dist/ez_setup.py
然后,就可以不帶任何參數運行腳本來安裝 setuptools 中其余部分了(如果不作為一個單獨的步驟來執行這個步驟,在首次安裝其他包時,它還是會被完成)。會看到類似于下面的內容(當然,這要取決于所使用的版本):
清單 2. 引導 setuptools
% python ez_setup.pyDownloading http://cheeseshop.python.org/packages/2.4/s/ setuptools/setuptools-0.6b1-py2.4.egg#md5=b79a8a403e4502fbb85ee3f1941735cbProcessing setuptools-0.6b1-py2.4.eggcreating /sw/lib/python2.4/site-packages/setuptools-0.6b1-py2.4.eggExtracting setuptools-0.6b1-py2.4.egg to /sw/lib/python2.4/site-packagesRemoving setuptools 0.6a11 from easy-install.pth fileAdding setuptools 0.6b1 to easy-install.pth fileInstalling easy_install script to /sw/binInstalling easy_install-2.4 script to /sw/binInstalled /sw/lib/python2.4/site-packages/setuptools-0.6b1-py2.4.eggProcessing dependencies for setuptools
新聞熱點
疑難解答