卯起來寫… XD

安裝 Python 套件有提到 pip 工具是用來解決套件相依性的問題,這篇就稍微介紹幾個最常用的功能。

安裝套件

pip 工具最常用的功能就是安裝套件啦,預設它會去 PyPI 下載套件。用法就是:

(your venv) $ pip install <套件名稱>

預設會抓下該套件最新版安裝。如果你有特殊需求,可以指定安裝特定版本,比方我要安裝 lxml 4.0.0 版:

(your venv) $ pip install lxml==4.0.0

移除套件

這也很直覺,可以用 pip 來移除套件:

(your venv) $ pip uninstall <套件名稱>

升級套件

pip 提供 -U 參數可讓你用來升級套件版本。比方你發現 lxml 出新版了,那就可以用以下的指令升級至最新版:

(your venv) $ pip install lxml -U

要注意的地方是,如果你要升級的版本,他的相依套件需求有變動,那麼那些變動的相依套件,比如舊版相依 A 套件 1.0 版以上,新版卻需要 A 套件 2.0 版以上,也會跟著升級。

凍結套件列表

這個是開發比較會需要的功能。我們通常在開發一個專案時,視專案大小,可能你會相依很多套件。而當我們要佈署專案時,一般都會希望佈署的專案,其相依套件應該要跟開發環境一樣,這樣才不會踩到莫名其妙的雷。所以 pip 提供了 freeze 的功能,讓我們可以把目前所安裝的套件與其版本傾印出來,之後安裝時可以指定用這份列表的版本安裝回所有套件。首先我們先來製作這份列表:

(your venv) $ cd /your/project/dir
(your venv) $ pip freeze > requirements.txt

這樣就產生了一份 requirements.txt 檔案,裡面包含所有安裝套件的名稱、與其版本。

之後你到另外一台機器要佈署就很簡單,一樣把 venv / pip 工具都設定妥當後,直接執行

(your venv in another machine) $ cd /your/project/path
(your venv in another machine) $ pip install -r requirements.txt

這樣所有環境就可以確保一致。

Huston, we have a problem

pip 工具雖然已經很好用,但還是有下面幾個擾人的問題:

  1. 假設你專案需要某個套件 A,其相依的套件 B 要求要 2.0.0 版以上。如果某天套件 B 出了 bugfix 版 2.0.1,但因為套件 A 只要求套件 B 要 2.0.0 版以上即可,所以套件 B 的 2.0.1 版就不會自動被安裝。如果你想要安裝這類的 bugfix 版本,你得一個一個去檢查,很累
  2. 當你的專案跑了一陣子之後,你所相依的套件列表可能都有新版,此時你會面臨如何升級相依套件的問題。不要忘了,你專案相依的套件,很可能又相依其他套件,若整個套件列表非常龐大,你要怎麼追蹤哪些套件有變動?整個更新完後下 pip freeze 導入 requirements.txt 後用版控工具去 diff 比對嗎?相信我,很累。 XD

所以 pipenv 的誕生,讓大家很高興,後面再來介紹。

One comment on “pip 工具介紹

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *