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


















 
 
 











 
 
 
 