Python包(模組)管理詳解

pythontab發表於2013-11-20

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=['foo'],

)

然後執行命令

$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

這個包就會被自動安裝到系統合適的位置。

setuptools

setuptools 是對 distutils 的增強, 尤其是引入了包依賴管理。

setuptools可以為Python包建立 egg檔案, Python 與 egg 檔案的關係,相當於java與jar包的關係。

setuptools 提供的 easy_install 指令碼可以用來安裝 egg包。 另外, easy_install 可以自動從 PyPI 上下載相關的包,並完成安裝,升級。

easy_install 提供了多種安裝,升級Python包的方式,例如:

easy_install SQLObject

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

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

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

easy_install --upgrade PyProtocols

後來開發者們覺得 setuptools 開發的太慢了,fork出了 Distribute 專案,然後2013年8月, Distribute 又合併回 setuptools 0.7。

pip

pip 是安裝,管理Python包的工具。它是對 easy_install 的一種增強。 同樣可以從 PyPI 上自動下載,安裝包。

在pip中,

安裝前所有需要的包都要先下載,所以不會出現安裝了一部分,另一部分沒安裝的情況

所有安裝的包會被跟蹤,所以你可以知道為什麼他們被安裝,同時可以解除安裝。

無需使用 egg 檔案。

使用方式簡單:

pip install pkg_name

pip uninstall pkg_name


相關文章