從 JavaScript 角度學 Python(16) - pip

前言

前面章節我們學習了許多 Python 的基礎語法,所以接下來我想額外介紹 pip,pip 在實際開發上來講也很常使用到。

pip3

有些人是 pip or pip3,以下都會是簡稱 pip3 代表 Python3 避免混淆。

那麼 pip3 是什麼呢?pip3 簡單來講它是一個軟體包管理系統,如果將鏡頭轉來到 JavaScript 來講的話,只要你有使用過 Vue Cli、Webpack、Gulp 等等工具,那麼你就會使用 npm 來安裝套件,所以你也可以將 pip3 想像成 npm (Ruby 我記得是 gem,如果有錯的話請幫糾正。)。

(如果你對 npm 指令不熟悉的話,可以閱讀此篇文章快速了解一下,避免後面講的都不熟悉。)

而這個 pip3 可以說是非常非常的重要,畢竟我們在開發的時候,時常會需要安裝第三方套件(非官方內建套件),以 npm 來講它會在我們安裝 Node.js 的時候一併安裝,那麼 Python 呢?Python 基本上也是一樣的,其中 Python3 與 Python 2.7.9~2.8.0(印象) 就會內建安裝 pip3。

那麼該如何驗證自己電腦有 pip3 呢?只需要輸入以下指令就可以查驗(由於本篇是 Python3,因此要輸入 pip3,若是有特別調整過的可能是 pip):

1
pip3 --version

較舊的版本(例如: Python 2.x)是 pip --version

pip3 版本

而這就是最簡單辨別自己電腦有無安裝 pip3 軟體包管理系統的方式,夠簡單了吧?恭喜你又學會一個東西了:

恭喜你安裝成功了!

pip3 常用指令

雖然我們可以透過在終端機輸入 pip3 --help 查看全部的 pip3 指令,但是認真來講我們真的會用到這麼多嗎?不,不會就連我 npm 會用的指令也就那幾個而已,所以這邊我稍微整理出一些常用的指令表格:

說明 指令
安裝套件 pip3 install [ package-name ]
移除套件 pip3 uninstall [ package-name ]
已經安裝的套件列表 pip3 list
輸出已經安裝的套件資訊 pip3 freeze
pip3 指令說明列表 pip3 help | pip3 -h | pip3 --help
搜尋套件 pip3 search [ package-name ]
pip3 版本資訊 pip3 --version | pip -V

接下來就實際來玩一下這些指令。

(貼心提醒:以上若發現 pip3 無法使用的話,請改用 pip)

install

安裝套件的時候,pip3 會將套件安裝到我們自己的電腦上,因此當你安裝了這個套件,整台電腦就可以一直使用,這邊舉例先安裝一套套件叫做 「pytube」,這是一個下載 Youtube 影片跟音樂的套件,所以這邊就先試著安裝一下:

1
pip3 install pytube

pytube

oh,對了,如果你嘗試輸入 pip3 i pytube 是會出現 ERROR: unknown command "i" 錯誤的唷。

這邊或許會有一些人想說,難道 pip3 安裝套件的時候沒有區分 global 與 local 嗎?

沒錯,以當前文章介紹進度來講是的,沒有區分,但是後面章節會介紹如何只安裝在 local。

uninstall

有安裝當然就有移除,移除指令相對比較單純:

1
pip3 uninstall pytube

基本上刪除套件時,會再三確認你是否要刪除以及告知你即將刪除的套件路徑,接下來輸入 y 就可以了:

uninstall

多一個確認行為我個人是滿喜歡的,不然有時候自己會粗手指不小心誤按或者腦殘打錯:

打錯指令的我

list

如果你依照上面步驟操作下來的話,基本上剛剛安裝的 pytube 套件已經被移除了,所以為了呈現 list 效果會建議在安裝回來唷~

1
pip3 install pytube

如果你沒有移除套件的話,那麼就可以直接輸入以下指令來查看當前已經安裝的 Python 套件:

1
pip3 list

list

freeze

freeze 比較特別一點,認真講起來的話…你可以把它想想成 npm init 生出來的 package.json,主要會紀錄我們當前電腦所安裝的套件,如果你只是單純的輸入 pip3 freeze 就可以看到它會列出你本地安裝的套件:

freeze

你會看到它與 pip3 list 有那麼一點不同:

list

所以代表著 pip3 freeze 主要是輸出我們當前安裝的套件與版本,而這個資訊將會用於還原套件用,剛才有講到 pip3 freeze 類似 npm init 生出來的 package.json,但是你輸入之後你會發現資料夾並不會發生任何狀況,因此你必須這樣輸入才正確:

1
pip3 freeze | tee requirements.txt

或者是

1
pip3 freeze > requirements.txt

上面兩個指令的意思都是將當前安裝的套件資訊寫入到 requirements.txt,因此就算你要打 qqqqq.txt 也是可以,但是這邊建議使用 requirements 就好。

完成了套件紀錄之後,當我們拿到一個 Python 要還原開發環境時該怎麼還原呢?以 JavaScript 環境來講,你只需要輸入 npm install,就可以還原了,而 Python 的話,你要輸入以下指令才可以還原套件:

1
pip3 install -r requirements.txt

還原套件

因此 pip3 freeze > requirements.txt 指令會比較常用於系統開發告一個段落後才使用,與 npm init 使用時機是相反的,一個是一開始就要初始化專案,一個是偏向開發告一個段落後才使用。

help

help 指令還需要介紹嗎?但是為了充字數,我覺得我還是簡單寫一下好了。

充字數

很多時候我們並不會記得指令,甚至會懶得上網搜尋,這時候就可以直接輸入 pip3 help 來查看 pip3 有哪些指令以及說明:

help

search 這個功能其實一直都非常的很好用,本身 npm 也有,你可以試著輸入以下指令了解:

1
npm search vue

vue 相關

只是我想你應該很少用,因為我就根本沒用過:

我沒用過

鏡頭拉回 Python,本身 Python 也有相同功能,而用法與我們在 npm 是相同的,但可惜的是 Python 目前已經永久禁用該功能了,詳情可見官方說明

所以基本上你輸入 pip3 search pytube 是會出現以下訊息的:

1
2
ERROR: XMLRPC request failed [code: -32500]
RuntimeError: PyPI's XMLRPC API is currently disabled due to unmanageable load and will be deprecated in the near future. See https://status.python.org/ for more information.

算是滿可惜的一點。

version

雖然一開始有講過了,但是這邊還是在講一次。

查看自己當前的 pip3 版本號是非常重要的:

1
pip3 -V

pip3 版本

請注意大小寫的 vV 是不同的唷。

為什麼重要呢?因為有時候我們要回報套件 Bug 給作者時,是會建議附上版本號,主要是讓作者還原開發狀況,這樣子也會比較好抓出問題,如果你只回報問題而沒告知更多更詳細的細節等,那可能就是屬於欠人教訓的提問

參考文獻

作者的話

太好了,狗狗結紮後醫生打電話過來說牠很健康,一下子就醒來了,但是水跟飼料完全不喝,我想應該是太過緊張害怕導致。

關於兔兔們

兔法無邊