Pipenv,它的項目簡介為 Python Development Workflow for Humans,是 Python 著名的 requests 庫作者 kennethreitz 寫的一個包管理工具,它可以為我們的項目自動創建和管理虛擬環境並非常方便地管理 Python 包,現在它也已經是 Python 官方推薦的包管理工具。
溯源
起初,Python沒有便利的方式來安裝軟件包。
後來,Easy Install 安裝方便,但卸載不需要的軟件包並不容易。
接著,pip逐漸被人們熟練的使用,其具有方便的安裝和卸載等諸多優點,但當用戶使用不同版本的相同庫的時候。不能將軟件包彼此隔離。
隨著虛擬環境的發展,出現了很多管理虛擬環境的工具:virtualenv,venv,pyenv,pyenv-virtualenv等。它們都可以在pip和requirements.txt文件中很好地發揮作用。
以前我們需要將虛擬環境依賴包的導出為 requirements.txt , 一旦依賴包變動,就要重新導出,而pipenv會自動幫我們生成 Pipfile 和 Pipfile.lock ,Pipfile會隨著項目,當我們安裝時只需在 Pipfile 和 Pipfile.lock 所在的目錄下運行 pipenv install即可。
Pipenv優點。
pipenv由requests庫作者Kenneth Reitz開發,結合了pip及virtualenv的功能和優點,其目的是替代virtualenv和pyenv。
- 解決了requirements.txt依賴管理侷限的不確定構建問題,提供的pipenv替代pip並自帶一個依賴清單Pipfile和依賴鎖定Pipfile.lock。
- 有效的的解決了多個項目依賴不同版本的子模塊的問題,自動關聯項目相關的virtualenv,能夠快速的加載virtualenv。
- 解決了依賴分析問題,使用pipenv graph命令可以看到依賴樹
- 廣泛使用 Hash 校驗,保證安全性。
- 可通過自動加載 .env 讀取環境變量,簡化開發流程。
使用
PyCharm 從 2018.2 版本開始已經支持 pipenv 。
安裝
pip install pipenv
創建環境
一行命令搞定 virtualenv 和 pipfile 的初始化(不初始化則將使用默認版本的Python),它會在你的用戶目錄下對你的 virtualenv 進行統一管理。如果當前目錄下有 requirements.txt 文件,它會非常貼心地幫你自動轉換。(注意:切換至新建的python項目目錄)。
cd/>
初始化一個 python3 的環境
pipenv --three
初始化一個 python2 的環境
pipenv --two
初始化特定版本的環境
pipenv --python 3.6
進入 / 退出環境
進入環境
pipenv shell
退出環境
exit
刪除虛擬環境
pipenv --rm
安裝 / 更新 / 卸載依賴
pipenv install 創建了項目的虛擬環境,
Pipfile文件,source部分用來設置倉庫地址,packages部分用來指定項目依賴的包,dev-packages部分用來指定開發環境需要的包,這樣分開便於管理。
而Pipfile.lock中記錄了當前環境中安裝的依賴的版本號以及哈希,以保證每次裝出來的依賴都是一致的,注意,任何情況下都不要手動修改 Pipfile.lock 文件!
pipenv install的時候有三種邏輯:
- 如果目錄下沒有Pipfile和Pipfile.lock文件,表示創建一個新的虛擬環境;
- 如果有,表示使用已有的Pipfile和Pipfile.lock文件中的配置創建一個虛擬環境;
- 如果後面帶諸如django這一類庫名,表示為當前虛擬環境安裝第三方庫。
安裝項目已有的所有依賴,加--dev表示包括 Pipfile 的 dev-packages 中的依賴(通常有一些Python包只在你的開發環境中需要,而不是在你的生產環境中,例如單元測試包。 Pipenv將使用–dev標誌保持兩個環境分開。)。
pipenv install --dev
安裝某個庫。
pipenv install requests
安裝指定版本的庫,安裝時加--dev表示加入到 dev 環境。
pipenv install parsel==1.3.1
從項目中更新某個庫
pipenv update requests
更新所有的庫
pipenv update
從項目環境中刪除某個庫
pipenv uninstall requests
另外,Pipefile 和 Pipefile.lock 都會按照你的操作進行自動的更新,如果需要手動修改包的依賴條件,手工編輯 Pipefile 並進行安裝即可。
打印環境中已安裝的包
pipenv graph
能夠更清晰地展示現有依賴包。
鎖定版本
更新 lock 文件鎖定當前環境的依賴版本
pipenv lock
環境變量管理
如果你開發調試時需要配一堆環境變量,可以寫到.env文件中,在pipenv shell進入虛擬環境時,它會幫你把這些環境變量加載好,非常方便。
例如寫一個.env文件
echo "test=toutiao" > .env
之後pipenv shell進入虛擬環境,echo $test就能看環境變量的值toutiao已經設置好了。
運行python命令
pipenv run python/>
這將使用當前虛擬環境關聯的Python解釋器,執行命令。
Options
Usage: pipenv [OPTIONS] COMMAND [ARGS]...
Options:
--update 升級 pipenv, pip 到最新.
--where 輸出項目的目錄信息.
--venv 輸出 virtualenv 的目錄信息.
--py 輸出 Python 解析器的路徑.
--envs 輸出環境變量的設置.
--rm 刪除當前 virtualenv.
--bare Minimal output.
--completion Output completion (to be evald).
--man 顯示使用手冊.
--three / --two 使用 Python 3/2 來創建 virtualenv
--python TEXT 直接指定 Python 解析器.
--site-packages 拷貝系統 site-packages 到 virtualenv.
--jumbotron An easter egg, effectively.
--version 顯示版本信息並退出.
-h, --help 顯示當前信息並退出.
Commands:
check 檢查安全漏洞和反對 PEP 508 標記在Pipfile提供.
graph 顯示當前依賴關係圖信息.
install 安裝提供的包,並加入 Pipfile 的依賴清單中
lock 生成 Pipfile.lock.
open 在編輯器(vim)查看一個特定模塊.
run 在 virtualenv 中執行命令.
shell 切換到 virtualenv 中.
uninstall 刪除提供的包,並清理 Pipfile 的依賴清單中.
update 卸載當前所以依賴,然後安裝最新包
閱讀更多 測試開發技術棧 的文章