原文章:點擊開啟連結
0.什麼是setuptools
setuptools是Python distutils增強版的集合,它可以協助我們更簡單的建立和分發Python包,尤其是擁有依賴關係的。使用者在使用setuptools建立的包時,並不需要已安裝setuptools,只要一個啟動模組即可。
功能亮點: 利用EasyInstall自動尋找、下載、安裝、升級依賴包 建立Python Eggs 包含包目錄內的資料檔案 自動包含包目錄內的所有的包,而不用在setup.py中列舉 自動包含包內和發布有關的所有相關檔案,而不用建立一個MANIFEST.in檔案 自動產生經過封裝的指令碼或Windows執行檔案 支援Pyrex,即在可以setup.py中列出.pyx檔案,而終端使用者無須安裝Pyrex 支援上傳到PyPI 可以部署開發模式,使項目在sys.path中 用新命令或setup()參數擴充distutils,為多重專案發布/重用擴充 在項目setup()中簡單聲明entry points,建立可以自動探索擴充的應用和架構
總之,setuptools就是比distutils好用的多,基本滿足大型項目的安裝和發布 1.安裝setuptools
1) 最簡單安裝,假定在ubuntu下
sudo apt-get install python-setuptools
2) 啟動指令碼安裝
wget http://peak.telecommunity.com/dist/ez_setup.pysudo python ez_setup.py
2.建立一個簡單的包
有了setuptools後,建立一個包基本上是無腦操作
cd /tmp mkdir democd demo
在demo中建立一個setup.py檔案,寫入
from setuptools import setup, find_packagessetup( name = "demo", version = "0.1", packages = find_packages(), )
執行python setup.py bdist_egg即可打包一個test的包了。
demo|-- build| `-- bdist.linux-x86_64|-- demo.egg-info| |-- dependency_links.txt| |-- PKG-INFO| |-- SOURCES.txt| `-- top_level.txt|-- dist| `-- demo-0.1-py2.7.egg`-- setup.py
在dist中產生的是egg包
file dist/demo-0.1-py2.7.eggdist/demo-0.1-py2.7.egg: Zip archive data, at least v2.0 to extract
看一下產生的.egg檔案,是個zip包,解開看看先
upzip -l dist/demo-0.1-py2.7.eggArchive: dist/demo-0.1-py2.7.egg Length Date Time Name--------- ---------- ----- ---- 1 2013-06-07 22:03 EGG-INFO/dependency_links.txt 1 2013-06-07 22:03 EGG-INFO/zip-safe 120 2013-06-07 22:03 EGG-INFO/SOURCES.txt 1 2013-06-07 22:03 EGG-INFO/top_level.txt 176 2013-06-07 22:03 EGG-INFO/PKG-INFO--------- ------- 299 5 files
我們可以看到,裡面是一系列自動產生的檔案。現在可以介紹一下剛剛setup()中的參數了 name 包名 version 版本號碼 packages 所包含的其他包
要想發布到PyPI中,需要增加別的參數,這個可以參考官方文檔中的例子了。 3.給包增加內容
上面產生的egg中沒有實質的內容,顯然誰也用不了,現在我們稍微調色一下,增加一點內容。
在demo中執行mkdir demo,再建立一個目錄,在這個demo目錄中建立一個__init__.py的檔案,表示這個目錄是一個包,然後寫入:
#!/usr/bin/env pythondef test(): print 'Hello World!'if __name__ == '__main__': test()
現在的主目錄結構為下:
demo|-- demo| `-- __init__.py`-- setup.py
再次執行python setup.py bdist_egg後,再看egg包
Archive: dist/demo-0.1-py2.7.egg Length Date Time Name--------- ---------- ----- ---- 1 2013-06-07 22:23 EGG-INFO/dependency_links.txt 1 2013-06-07 22:23 EGG-INFO/zip-safe 137 2013-06-07 22:23 EGG-INFO/SOURCES.txt 5 2013-06-07 22:23 EGG-INFO/top_level.txt 176 2013-06-07 22:23 EGG-INFO/PKG-INFO 95 2013-06-07 22:21 demo/__init__.py 338 2013-06-07 22:23 demo/__init__.pyc--------- ------- 753 7 files
這回包內多了demo目錄,顯然已經有了我們自己的東西了,安裝體驗一下。
python setup.py install
這個命令會講我們建立的egg安裝到python的dist-packages目錄下,我這裡的位置在
tree /usr/local/lib/python2.7/dist-packages/demo-0.1-py2.7.egg
查看一下它的結構:
/usr/local/lib/python2.7/dist-packages/demo-0.1-py2.7.egg|-- demo| |-- __init__.py| `-- __init__.pyc`-- EGG-INFO |-- dependency_links.txt |-- PKG-INFO |-- SOURCES.txt |-- top_level.txt `-- zip-safe
開啟python終端或者ipython都行,直接匯入我們的包
>>> import demo>>> demo.test()hello world!>>>
好了,執行成功。