標籤:
轉自http://www.nowamagic.net/academy/part/13/302/
當前的包管理工具鏈是 easy_install/pip + distribute/setuptools + distutils, 顯得較為混亂。
而將來的工具鏈組合非常簡單:pip + distutils2。
1. distutils : Python 內建的基本安裝工具,適用於非常簡單的應用情境,使用:
- 為項目建立 setup.py 指令碼。
- 執行 setup.py install 可進行安裝。
2. setuptools : 針對 distutils 做了大量擴充, 尤其是加入了包依賴機制. 在部分 Python 子社區已然是事實上的標準。
3. distribute : 由於 setuptools 開發進度緩慢,不支援 Python 3,代碼混亂,一幫程式員另起爐灶,重構代碼,增加功能,希望能夠取代 setuptools 並被接納為官方標準庫,他們非常努力,在很短的時間便讓社區接受了 distribute。
4. easy_install : setuptools 和 distribute 內建的安裝指令碼,也就是一旦 setuptools 或 distribute 安裝完畢,easy_install 也便可用。最大的特點是自動尋找 Python 官方維護的包源 PyPI,安裝第三方 Python 包非常方便。使用:
- setuptools / distribute 都只是擴充了 distutils。
- easy_install [PACKAGE_NAME] 自動從 PyPI 尋找/下載/安裝指定的包。
5. pip : pip 的目標非常明確 – 取代 easy_install. easy_install 有很多不足:安裝事務是非原子操作,只支援 svn,沒有提供卸載命令, 安裝一系列包時需要寫指令碼。pip 解決了以上問題,已儼然成為新的事實標準,virtualenv 與它已經成為一對好搭檔。使用:
- 安裝: pip install [PACKAGE_NAME]
- 卸載: pip uninstall [PACKAGE_NAME]
- 支援從任意能夠通過 VCS 或瀏覽器訪問到的地址安裝 Python 包
6. distutils2 : setuptools 和 distribute 的誕生是因為 distutils 的不濟,進而導致目前分化的狀況。而 Guido 並未接納 distribute 為官方標準,並說明了原因。開發人員在失落之餘明確了新的方向和任務 – distutils2,它將成為 Python 3.3 的標準庫 packaging,並在其它版本中以 distutils2 的身份出現。換句話說,它和 pip 將聯手結束目前混亂的狀況。(但是就我搜尋瞭解的情況,這個計劃已經擱置了。)
7. zc.buildout : 這是一個臃腫的安裝、部署系統,在 Zope 社區運用教廣,功能強大/繁複但使用情境有限,除非確有需要,不值得投入太多的精力去研究,pip + virtualenv + fabric 的工具鏈組合更為簡單、靈活。
Python包管理工具之間的關係