Python 2.7.9與3.4及之後的版本,預設已包含了pip。在以前還流行過像easy_install之類的類似工具,但pip已成為後來居上的主流。
如果所用的Python比前述版本還舊,建議可更換新版本就自帶pip。若不想換Python版本,要用pip就要先安裝它。
為方便說明,本文以下的解說假定了幾個前題:
- 主要以Windows平台為說明例。
- 電腦中已正確安裝Python 3.x的版本。
- 下載檔案存放在d:\download。命令列的位置也切換到此資料夾。
- 讀者具備使用Python 3的簡單基礎知識與技能。
到官方的安裝說明頁,下載get-pip.py後。
python get-pip.py
順利的話,就可在命令列執行pip。若在Ubuntu Linux,則可用apt-get,不一定要用上述方法:
sudo apt-get install python3-pip
在Linux上往往是Python 2.x與3.x兩種版本並存,所以要執行pip3,而不是pip。這與python3執行3.x版,python執行2.x版的意思一樣。即然是軟體包管理系統,那麼它當然有一些像安裝、移除、列示、搜尋……軟體包的諸多功能。這與Linux系統上的套件管理工具APT或RPM有點類似,只是APT/RPM管理的是作業系統所用的套件;pip則是管理Python用的軟體包。
以下就一些常用的功能做簡單介紹,操作對象主要以requests軟體包為例。requests是很好用的HTTP網路函式庫。另一個例子則是lxml,是個XML/HTML的處理函式庫。以後有機會另行撰文介紹這兩者。
【顯示幫助】
pip help
顯示用法:pip <command> [options]若只輸入pip,也是執行pip help。如果忘了用法,可利用幫助來回憶一下。
【安裝軟體包】
安裝requests:
pip install requests
安裝時,會自動檢查軟體包的相依性,會自動把所依賴的軟體包也安裝進來。也可以一次安裝一個以上的包,例如:
pip install requests beautifulsoup4
也可指定要安裝的版號,如:
pip install requests==2.8.1
假如已安裝了舊版,想升級到新版:
pip install --upgrade requests
這裡也可用-U代替--upgrade。有些軟體包,需要做編譯的工作,作業系統中若沒有編譯的工具,安裝就會失敗。這個例子,以lxml為例。在Windows平台,你可選擇到PyPI直接下載.exe的安裝執行檔。或者到Python Extension Packages for Windows下載已編譯過並包裝好的.whl檔案。
這裡選擇後者。在該網頁上直接以lxml關鍵字搜尋,找到與作業系統對應版本的檔案,如lxml-3.5.0-cp35-none-win_amd64.whl,下載儲存後進行安裝:
pip install lxml-3.5.0-cp35-none-win_amd64.whl
【移除軟體包】
移除requests:
pip uninstall requests
【顯示個別軟體包資訊】
顯示requests的資訊,及檔案:
pip show --files requests
【搜尋】
pip search [options] <query>
搜尋PyPI中,名稱或摘要包含<query>者。建議直接上PyPI網頁查即可,在Windows上顯示的結果會限於小小的命令視窗,很不方便查看。【列示】
pip list
可顯示目前安裝的軟體包清單。
pip list --outdated
顯示目前安裝的軟體包中,已有出現新版者。【凍結】
凍結?這只是自己直接從字面上所翻譯的字眼。這個功能與上述的【列示】有點類似。我們先來考慮一種假定的情景:使用Python好一段時間,裡頭已裝了不少心愛的軟體包,某天作業系統要重灌,系統重灌完之後辛苦安裝的Python軟體包也要逐一重新安裝,這豈不費時又費工?
是的,不過pip這個功能,可以把目前安裝的軟體包的清單與版號全部如實地記錄下來,如果把這記錄寫到檔案中,下回系統重裝時,可從檔案知道要安裝什麼軟體包,而且pip會自行依這檔案,把其中列的軟體包都裝進來,這想就不會費時又費工了。
現在可以了解“凍結”的用意了嗎?想像一下,把之前用過的包,冷凍後,原封不動地移到另一個地方使用。
前面所說的檔案,被稱為需求檔(requirements file),它的格式與pip list的結果很像,其實凍結的指令也與pip list接近,只是把list改為freeze:
pip freeze
自行與上述pip list的顯示結果比較一下,是否很像。只要將顯示結果存到檔案,這檔案就是所謂的需求檔:
pip freeze > requirements.txt
需求檔的檔名可自定,不一定要用這名稱。好了,當有這需求檔,下回遇到系統重灌後,就可很快速把以前裝過的軟體包一次都裝回來:
pip install -r requirements.txt
只是像前述lxml這類的,要另行安裝,此時應該暫時讓它在requirements.txt中不產生作用,只要在前面加個“#”符號,存檔後,該行就成為註釋而失去原有的作用,如:
# lxml==3.5.0
這段最後,說明一下為何稱為需求檔。假定你以Python寫了套軟體,其中用了數種軟體包,當要交付這套軟體的原始碼給他人使用,他人取得你寫的軟體,他的電腦中除了要安裝Python,也必須要有軟體中有用到的軟體包,這軟體才能正常執行。你一定不會壞心到讓別人自己去翻源碼來查出用了什麼軟體包,而是會主動好心的付上一份所需要的軟體包清單,好方便他人使用。這份清單也就是要正確執行你的軟體時,所「需求」的Python包清單。
「需求檔」的用途當然並不僅限於這種情況,舉凡你想“凍結”並複製某種執行環境時都可用得到,如前述系統重灌之後,以及後述的虛擬環境。
【Python虛擬環境下的使用】
Python虛擬環境在以後會另行撰文介紹,這裡只介紹與pip相關的部分。不論用Virtualenv或venv,在建立Python虛擬環境時,Python除了會建立一個Python執行環境,也會自動在該環境把pip也裝進去。
在啟用該虛擬環境後,就可用pip在裡頭安裝所要的軟體包,上述的pip使用方式都可通用。
【更新pip】
前述用pip更新其它軟體包,pip也可以更新自己。你一定猜到用:
pip install -U pip
在Linux或OS X的確是如此,但在Windows必須:
python -m pip install -U pip
不然pip會先把自己解除了,就無法執行pip了。此處的python -m用法是把某個模組當腳本般執行。上述更新pip的作法也可適用於Python虛擬環境。
在Ubuntu中的python3-pip的更新,建議還是交給APT處理即可。
以上只是一些簡單與常用的pip使用。詳細用法可見官方說明。
沒有留言:
張貼留言