一篇學會 Pipenv 使用
簡介
為了避免污染系統環境下的 Python,我們在利用 Python 開發項目時,通常會在項目的根目錄創建 python 虛擬環境。
閱讀官網文檔,python3.6 + 以上,python 自帶了 venv 命令可以快速構建虛擬環境,你只需在 Google 中搜索【python3.x venv docs】便可以搜索到對應版本 Python 下,venv 的使用文檔。
使用 venv 創建虛擬環境:
- python -m venv venv
這種方式有個問題就是無法創建不同版本的 Python 虛擬環境,比如我系統中只有 python3.7,就無法創建 python3.8 的虛擬環境。
這也是我目前遇到的問題,一些比較新的項目,其要求 python3.8+,而我系統只有 python3.7,此時就需要使用 pipenv 了,先安裝一下:
- pip install pipenv
pipenv 基本使用
pipenv 用法比較多,我琢磨了一下,要用好 pipenv,了解起概念和基本用法就好了。
最基本的命令便是創建不同 Python 版本的虛擬環境。
在項目根目錄下,運行下面 pipenv 命令:
- pipenv --python 3.8.8
pipenv 會掃描系統中相應的位置,判斷 python3.8.8 是否已經有了,如果沒有,則自動下載 python3.8.8 并為項目創建 python3.8.8 版本的虛擬環境。
此外,還有一個知識點:
如果項目根目錄中有 Pipfile,怎創建虛擬環境時,會根據 Pipfile 中的信息生成虛擬環境,比如安裝相應的第三方庫,如果沒有,怎以默認的形式去生成虛擬環境,然后創建 Pipfile,通過 VsCode 打開 Pipfile,其形式如下:
- [[source]]
- url = "https://pypi.org/simple"
- verify_ssl = true
- name = "pypi"
- [packages]
- numpy = "==1.21.5"
- [dev-packages]
- [requires]
- python_version = "3.8"
- source 用來設置倉庫地址,即從哪下載虛擬環境所需要的包
- packages 用來指定項目依賴的包,即你安裝了的包
- dev-packages 用來指定開發環境需要的包,這類包只用于開發過程,不用與生產環境,比如單元測試相關的包,只在開發階段有用,這樣分開便于管理。
- requires 中指定目標 Python 版本
pipenv 會默認將虛擬環境安裝在 ~/.virtualenvs 中,通過 pipenv --venv 可以直接查看當前項目虛擬環境的路徑,如果我們需要使用 PyCharm 編寫項目時,可以根據這個目錄,直接在 PyCharm 中設置使用該虛擬環境:
pipenv 常規命令如下:
- # 安裝命令
- pipenv install requests #在項目所在虛擬環境中安裝requests
- pipenv install parsel==1.3.1 #安裝parsel并指定其版本
- pipenv install --dev nose2 #安裝nose2包并將其關聯為只在開發環境中需要的包
- # 卸載命令
- pipenv uninstall requests #在項目所在虛擬環境中卸載requests
- pipenv uninstall --all #從虛擬環境中移除所有已安裝的包,但Pipfile.lock文件不受影響
- pipenv uninstall --all--dev #從虛擬環境中卸載所有開發包,并從Pipfile文件中移除這些包
- # 更新命令
- pipenv update requests #在項目中更新requests包
- pipenv update #更新項目中所有的包
- pipenv update --outdated #查看現有包哪些已經過期
- #查看命令
- pipenv graph #顯示現有的依賴包
- pipenv lock #更新Pipfile.lock文件鎖定當前環境的依賴版本
pipenv shell
在我現在的工作流中,除了使用 pipenv 創建虛擬環境后,pipenv 其他命令都不太使用,因為已經比較熟悉 pip 命令了,不想再去背 pipenv 的命令。
當 pipenv 創建完虛擬環境后,我會通過 pipenv shell,在當前 terminal 中激活虛擬環境,然后直接在其中使用 pip,這樣,從 venv 換成 pipenv 幾乎沒有任何切換成本了,具體的流程為:
- pipenv --python 3.8.8
- pipenv shell
- pip install requests
結尾
好啦,關于 pipenv 了解到這個程度就夠用了,至于其他的細節,沒遇到問題就不深入研究了,考慮投入產出比嘛。
參考文章:
Pipenv 使用入門