Pipenv Notes
Why Pipenv
當有很多 Python project 要維護,
不同的 project 有可能使用相同的 python libraries 的不同版本,
不使用 virtual environment 而將所有的 python modules 都裝在自己的機器上就會造成版本衝突。
過去使用 virtualenv + requirement.txt 的機制可以在不同的 project 使用同一個套件的不同版本,
也能夠讓新加入的開發者或 production 環境可以快速安裝 project 需要的套件,
但當套件需要更新時相當麻煩,
需要手動再去倒出一份新的 requirement.txt,
而且當 project 有不同環境的需求的時候(例如 development 環境和 production 環境)還要維護requirement-prod.txt 和 requirement-dev.txt 兩份套件設定,
如果不搭配 pyenv 也無法切換不同的 python 版本。
後來發現了 Python 官方推薦的 pipenv 解決了這些問題,
可以方便的只用 command 做到:
- 建立獨立的 python 版本和套件虛擬環境
- 安裝並記錄套件版本到自動生成的
Pipfile和Pipfile.lock,同時透過套件的 Hash 值檢查套件安全性 - 紀錄套件使用環境 (分開 development 和 production 環境)
- 讀取
.env檔案設定虛擬環境的環境變數 - 自動切換系統中的 python 版本(或
pyenv有安裝的 python 版本)
操作 Pipenv
Install Pipenv
pip3 install pipenv
Pipenv Commands
建立特定 python 版本的獨立虛擬環境:
到 project 所在的目錄下
pipenv --python 3.8- 注意該版本的 python 系統要有,不然就要用
pyenv裝一下
- 注意該版本的 python 系統要有,不然就要用
安裝套件
pipenv install flask安裝 development 套件
加上
--dev的套件在自動生成的Pipfile中會被放到[dev-packages]底下pipenv install pytest --dev移除套件
pipenv uninstall flask在建立的虛擬環境中執行 script
pipenv run python server.py也可以執行其他指令如
pytestpipenv run pytest進入虛擬環境
pipenv shell要離開虛擬環境時在輸入
exit即可用取得的
Pipfile和Pipfile.lock建立虛擬環境pipenv install如果要連 development 環境的套件一起安裝
pipenv install --dev從
requirement.txt建立Pipfile和Pipfile.lockpipenv install輸出
requirement.txt實際上不需要做這件事,
但在某些特殊情況下(例如特殊平台的需求)還是可以這樣做pipenv lock --requirements > requirements.txt升級虛擬環境中的套件
pipenv update刪除目前的虛擬環境
pipenv --rm
Upgrade Pipenv
pip3 install --upgrade pipenv