在Python環境中已經有不少成熟的包,能夠經過安裝這些包來擴展咱們的程序。html
例如,不少時候Python開發人員都會去PyPI網站去查找本身想要使用的包,而後進行安裝。PyPI ( Python Package Index)是得到第三方 Python 軟件包以補充標準庫的一個站點。python
在安裝Python包的過程當中,常常涉及到distutils、setuptools、distribute、setup.py、easy_install、easy_install和pip等等。瀏覽器
忽然對Python的包管理凌亂了,這些工具關係是什麼,應該怎麼去選擇使用?併發
下面就簡單介紹下Python包管理相關的一些內容。svn
這麼多的Python包管理工具,剛開始接觸Python時會有點不知如何選擇。其實,當查過Python的官方文檔以後,慢慢就理清了這些工具之間的關係了,也就沒有這麼混亂了。工具
下面就分別對Python中的包管理工具進行簡單的介紹。post
distutils 是 python 標準庫的一部分,這個庫的目的是爲開發者提供一種方便的打包方式, 同時爲使用者提供方便的安裝方式。網站
咱們常用的setup.py就是基於distutils實現的,而後經過setup.py就能夠進行打包或者安裝了。ui
看一個簡單的例子,找一個目錄建立三個文件foo.py、bar.py和setup.py,其中setup.py的內容以下:url
from distutils.core import setup setup( name='fooBar', version='1.0', author='Will', author_email='wilber@sh.com', url='http://www.cnblogs.com/wilber2013/', py_modules=['foo', 'bar'], )
而後,在該目錄中運行 python setup.py sdist ,會獲得如下輸出,同時生成了一個"fooBar-1.0.zip"包。
使用者就能夠解壓縮這個包而後執行 python setup.py install進行安裝,而後就可使用foo、bar這兩個模塊了:
關於更過如何編寫setup.py的內容,請自行參閱Python官方文檔中的setupscript部分。
setuptools 是對 distutils 的加強,尤爲是引入了包依賴管理。咱們能夠經過ez_setup.py來安裝setuptools。
至於distribute,它是setuptools的一個分支版本。分支的緣由是有一部分開發者認爲 setuptools 開發太慢。但如今,distribute 又合併回了 setuptools 中,因此能夠認爲它們是同一個東西。
前面看到setup.py能夠建立一個壓縮包,而setuptools使用了一種新的文件格式(.egg),能夠爲Python包建立 egg文件。setuptools 能夠識別.egg文件,並解析、安裝它
當安裝好setuptools/distribute以後,咱們就能夠直接使用easy_install這個工具了:
經過 easy_install --help 命令能夠獲取該命令相關的幫助提示:
根據上面的分析,能夠看到setuptools/distribute和easy_install之間的關係:
pip是目前最流行的Python包管理工具,它被看成easy_install的替代品,可是仍有大量的功能創建在setuptools之上。
easy_install 有不少不足:安裝事務是非原子操做,只支持 svn,沒有提供卸載命令, 安裝一系列包時須要寫腳本。pip 解決了以上問題,已經成爲新的事實標準。
pip的使用很是簡單,並支持從任意可以經過 VCS 或瀏覽器訪問到的地址安裝 Python 包:
文章的下面部分就重點介紹一下pip相關的內容。
在你們使用Python中,推薦使用pip進行Python包管理,pip的安裝和使用都比較方便。
pip的安裝有兩種經常使用的方式:
對於pip,最經常使用的確定仍是 pip --help ,經過幫助文檔,就能夠大概知道如何使用命令和參數。
pip經常使用命令集合:
使用 |
命令 |
從PyPI安裝軟件包 |
pip install SomePackage |
卸載軟件包 |
pip uninstall SomePackage |
查看以安裝軟件包 |
pip list |
查看可升級軟件包 |
pip list --outdated |
升級軟件包 |
pip install --upgrade SomePackage |
查看軟件包安裝了哪些文件及路徑等信息 |
pip show --files SomePackage |
安裝軟件包的指定版本號 |
pip install SomePackage # latest version
pip install SomePackage==1.0.4 # specific version
pip install 'SomePackage>=1.0.4' # minimum version |
根據依賴文件安裝軟件包 |
pip freeze > requirements.txt # 使用pip導出依賴文件列表
pip install -r requirements.txt # 根據依賴文件列表,自動安裝對應的軟件包 |
本文介紹了Python的各個包管理工具之間的關係,相信經過這篇文章的介紹,就不會再對distutils、setuptools、distribute、setup.py、easy_install、easy_install和pip等等名詞感受混亂了。
大體瞭解這些Python包管理工具後,你們應該也清楚了怎麼選擇和使用。
本文沒有涉及如何製做併發佈一個Python包,感興趣的同窗能夠去Python官網上查查。