創用 CC 授權條款
除非另有註明,本網站的著作Fygul Hether製作,以創用CC 姓名標示-非商業性-禁止改作 4.0 國際 授權條款釋出。

2016年1月20日 星期三

pip: Pip Installs Packages

Python安裝Package(軟體包)的方式有數種,對於已列表在PyPI的包,最方便的方式可以說是使用pip這套軟體包管理系統。

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使用。詳細用法可見官方說明

沒有留言:

張貼留言