Python套件管理不同方式的差異
學習Python已經有一段時間,常常會遇到安裝各種套件的問題,一會setup.py, 一會easy_install,一會又是pip,還有一些概念比如distutils , setuptools等等,搞不清楚誰是誰,什麼時候該用什麼,今天就把這些概念澄清一下。
distutils
distutils是Python標準函式庫的一部分,其初衷是為開發者提供一種方便的包裝方式, 同時為使用者提供方便的安裝方式。
例如你創建了一個名為foo的包,包含一個foo.py文件,你想把它打包以便其它人使用。 這時候你需要寫一個setup.py檔:
from distutils.core import setup
setup(name='foo',
version='1.0',
py_modules
version='1.0',py_modulesoo',
) 然後運行命令$python setup.py sdist然後你發現當前目錄下出現一個名為dist的資料夾,裡面有一個foo-1.0.tar.gz的包。 這個包裡有三個文件,foo.py, setup.py, PKG-INFO,前兩個文件和我們之前提到的兩個文件一樣。 PKG-INFO是關於包的一些資訊。然後你就可以把foo-1.0.tar.gz幫別人安裝了。 安裝者要使用這個包時,只需要解壓縮這個foo-1.0.tar.gz文件,再運行命令$python setup install這個包就會被自動安裝到系統合適的位置。 setuptoolssetuptools 是對 distutils 的增強, 尤其是引入了包依賴管理。 setuptools可以為Python套件建立 egg文件, Python 與 egg 檔案的關係,相當於java與jar套件的關係。 setuptools 提供的 easy_install 腳本可以用來安裝 egg套件。 另外, easy_install 可以自動從 PyPI 下載相關的套件,並完成安裝,升級。 easy_install 提供了多種安裝,升級Python套件的方式,例如:easy_install SQLObjecteasy_install -f http://pythonpaste.org/package_index.html SQLObject /to/MyPackage-1.2.3.tgzeasy_install /my_downloads/OtherPackage-3.2.1-py2.3.eggeasy_install --upgrade PyProtocolseasy_install --upgrade PyProtocols
easy_install --upgrade PyProtocols後來開發者們覺得了了Distribute 項目,然後2013年8月, Distribute 又合併回setuptools 0.7。 pippip 是安裝,管理Python套件的工具。它是對 easy_install 的一種增強。 同樣可以從 PyPI 自動下載,安裝套件。 在pip中,安裝前所有需要的包都要先下載,所以不會出現安裝了一部分,另一部分沒安裝的情況所有安裝的包會被跟踪,所以你可以知道為什麼他們被安裝,同時可以卸載。
無需使用 egg 檔案。