原文地址: https://www.ostechnix.com/pipenv-officially-recommended-python-packaging-tool/
譯文
上次我們釋出了一篇[如何用 Pip 進行 Python 包管理](如何用 Pip 進行 Python 包管理 "如何用 Pip 進行 Python 包管理")的文章。在那篇文章裡我們討論瞭如何安裝 Pip,如何用 Pip 來安裝、升級和刪除 Python 包。我們也討論了虛擬環境的重要性以及用 venv 和 virtualenv 工具建立虛擬環境的方法。但用 venv 和 virtualenv 管理多個虛擬環境是項乏味而且繁瑣的任務,幸好我們有另外一個名為 Pipenv 的工具,它是 Python.org 官網最新推薦的包管理工具,它能夠幫助我們不必建立虛擬環境的情況下非常容易地安裝和管理依賴。Pipenv 可以為你的專案自動地建立和管理一個虛擬環境,當你安裝 / 刪除包檔案時它可以新增 / 刪除包名稱到 Pipfile 檔案。
為什麼使用 Pipenv ?
Pipenv 解決下列實際問題:
- 你不再需要手動建立虛擬環境,Pipenv 為你自動建立。簡單地說就是 pipenv 和 virtualenv 一起工作。
- 管理 requirements.txt 檔案會導致一些問題,所以 Pipenv 用 Pipfile 和 Pipfile.lock 替代 requirements.txt,更適合於一般的使用場景。
- 安全。廣泛地使用 Hash 校驗,能夠自動曝露安全漏洞。
- 隨時檢視圖形化的依賴關係。
- 通過載入 .env 檔案簡化開發流程。
好了,讓我們開始學習 pipenv 吧。
有很多方式來安裝 pipenv,我們看看推薦的兩種:
使用 pip 安裝
官方推薦的安裝方式是使用 pip。確認你已經裝好了 Python 和 pip,如果沒有,檢視文章開頭的那個連結。 如果 pip 已經安裝好了,用下面的命令安裝 pipenv
$ pip install --user pipenv
複製程式碼
這個命令在使用者級別(非系統全域性)下安裝 pipenv。如果安裝後 shell 提示找不到 pipenv 命令,你需要新增當前 Python 使用者主目錄的 bin 目錄到 PATH 環境變數。如果你不知道 Python 使用者主目錄在哪裡,用下面的命令來檢視:
$ python -m site --user-base
複製程式碼
你會看到類似下面的輸出
/home/sk/.local
複製程式碼
這就是我的 Python 主目錄,那 bin 目錄就是 /home/sk/.local/bin
,清楚了吧?好,執行下面的命令:
$ pipenv --update
複製程式碼
任何時候你都可以用下面的命令升級 pipenv
$ pip install --user --upgrade pipenv
$ pipenv --update
複製程式碼
使用 pipsi 安裝
Pipsi 是一種幫助你在隔離的虛擬環境裡安裝 Python 指令碼的工具。安裝 pipsi,執行
$ curl https://raw.githubusercontent.com/mitsuhiko/pipsi/master/get-pipsi.py | python
複製程式碼
按照安裝提示,你必須修改 PATH 環境變數。 一旦 pipsi 安裝完成,用下面的命令來安裝 pipenv
$ pipsi install pew
$ pipsi install pipenv
複製程式碼
最後,用下面的命令來驗證安裝
$ pipenv --update
複製程式碼
要升級 pipenv,只需執行
$ pipsi upgrade pipenv
複製程式碼
使用 pipenv 管理 Python 安裝包
在 shell 中執行 pipenv
命令可檢視可用命令和通用選項
$ pipenv
複製程式碼
示例輸出如下
安裝軟體包
新建一個專案目錄或切換到已有專案目錄
$ mkdir myproject
$ cd myproject
複製程式碼
為你的專案安裝依賴包
$ pipenv install requests
複製程式碼
用 ls
命令檢視當前專案目錄,你會發現有兩個檔案:Pipfile 和 Pipfile.lock 。Pipfile 裡有最新安裝的包檔案的資訊,如名稱、版本等。用來 在重新安裝專案依賴或與他人共享專案時,你可以用 Pipfile 來跟蹤專案依賴。
$ cat Pipfile
複製程式碼
Pipfile.lock 則包含你的系統資訊,所有已安裝包的依賴包及其版本資訊,以及所有安裝包及其依賴包的 Hash 校驗資訊。
$ cat Pipfile.lock
複製程式碼
現在安裝另一個包,再次檢視這兩個檔案的內容。你會發現 Pipfile 現在包含兩個安裝包了,Pipfile.lock 也包含了所有已安裝包的依賴包及其版本資訊,以及所有安裝包及其依賴包的 Hash 校驗資訊。每次你安裝新的依賴包,這兩個檔案都會自動更新。
你注意到了嗎?我並沒有建立一個虛擬環境。Pipenv 自動為這個專案建立了一個虛擬環境,想知道它在哪裡嗎?用下面的命令來檢視虛擬環境的位置
$ pipenv --venv
/home/sk/.local/share/virtualenvs/myproject-x7-2XYPN
複製程式碼
檢視專案根目錄詳情,用
$ pipenv --where
/home/sk/myproject
複製程式碼
由上面命令的輸出可知,/home/sk/myproject
是我的專案根目錄,/home/sk/.local/share/virtualenvs/myproject-x7-2XYPN
是專案的虛擬環境目錄。
你可以用 ls
命令檢視虛擬環境目錄下的內容。
ls /home/sk/.local/share/virtualenvs/myproject-x7-2XYPN
複製程式碼
更新軟體包
$ pipenv update
複製程式碼
這個命令會刪除所有軟體包然後重新安裝最新的版本。
檢查軟體包的完整性
你是否擔心已安裝的軟體包有沒有安全漏洞?沒關係,pipenv 可以幫你檢查,執行下面的命令
$ pipenv check
Checking PEP 508 requirements…
Passed!
Checking installed package safety…
All good!
複製程式碼
上面的命令根據 Pipfile 裡的 PEP 508 標記檢查安全漏洞。
檢視依賴樹
我們執行 pipenv graph
看看會發生什麼
$ pipenv graph
複製程式碼
可以看到該命令顯示了依賴樹。
刪除軟體包
用下面的命令刪除軟體包
$ pipenv uninstall requests
Un-installing speedtest-cli…
Uninstalling speedtest-cli-1.0.7:
Successfully uninstalled speedtest-cli-1.0.7
Removing speedtest-cli from Pipfile…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Updated Pipfile.lock (c23e27)!
複製程式碼
刪除全部軟體包
$ pipenv uninstall --all
Un-installing all packages from virtualenv…
Found 1 installed package(s), purging…
Environment now purged and fresh!
複製程式碼
檢視詳細用法
$ pipenv -h
複製程式碼
或
$ pipenv --man
複製程式碼
我使用 pipenv 後,確實感覺比 pip 更方便。既然它由 Python.org 官方推薦,你安裝 Python 軟體包時可以棄用 venv 和 virtualenv 了。
今天的教程就到這裡了,更多精彩文章,敬請期待。
資源:
譯後實踐
我在 Mac 下使用時遇到些問題:
- 需要指定 LOCALE 環境變數 export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8
- 需要升級 pip 到最新版本,最好安裝 pipenv 時指定 --upgrade 引數 pip install --user --upgrade pipenv
- 安裝某些包時會報錯,產生不了 Pipfile.lock 檔案。 github.com/pypa/pipenv…
- 這篇教程裡沒說怎麼使用自動建立的虛擬環境,官方文件裡有:
$ pipenv run python main.py複製程式碼