Python 多版本共存:使用 pyenv 及 virtualenv
軟體開發在 Python 開發中,常常遇到每個專案都有不同的相依套件,甚至連 Python 的版本也可能不一樣。 而在單一主機中安裝和管理多個 Python 版本是一件很麻煩的事情。 所幸有許多工具可以輔助我們完成這項工作,例如 anaconda、docker 或雲端服務。 但本文要介紹的是使用 pyenv 搭配 virtualenv 來建立 Python 執行環境,這也是我最常使用的方法。
pyenv
pyenv 簡化了 Python 多版本共存的問題,使您能夠在單一主機中,安裝和切換不同版本的 Python。
在 macOS 中,只需使用 Homebrew 安裝即可。
// 安裝 pyenv
brew install pyenv
// 修改環境變數
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
以下是 pyenv 一些常用的指令。
# 查看可安裝的 Python 版本
pyenv install --list
# 查看所有已安裝的版本
pyenv versions
# 安裝特定版
pyenv install 3.10.12
# 切換 Python 版本
pyenv global 3.10.12 對應於全域
pyenv local 3.10.12 對應於當前資料夾
pyenv shell 3.10.12 對應於當前 shell
virtualenv
virtualenv 讓您能夠為每個不同的專案建立特定的虛擬執行環境,確保每個專案的執行環境是獨立的。這有助於避免不同專案之間的依賴套件衝突,同時保持環境的隔離性。
# 安裝 virtualenv
pip3 install virtualenv
# 切換到專案目錄,並執行以下指令生成虛擬環境
# venv 是可以自訂的目錄名稱
virtualenv venv
# 也可以指定版 Python 版本生成虛擬環境
virtualenv -p ~/.pyenv/versions/3.10.12/bin/python venv
# 啟動環境
# 啟動後,使用 pip 安裝的套件,都會裝在 venv 目錄中
source venv/bin/activate
# 關閉環境
deactivate
實務做法
現在我在開發 python 專案時,一定會先使用 virtualenv 建立虛擬環境,然後再進行開發工作。
# 建立專案目錄
mkdir project
# 切換到專案目錄
cd project
# 建立虛擬環境
virtualenv venv
# 啟動環境
source venv/bin/activate
# 進行開發
開發完成後,如果要將專案打包,您會發現 venv 資料夾相當大,因為它包含了整個專案的 Python 執行環境。 此時,您可以使用 pip freeze 指令導出依賴套件清單,之後就可以不用打包 venv 資料夾了。
# 導出依賴套件清單
pip3 freeze > requirements.txt
# 未來可以使用以下指令將必要套件安裝回來
pip3 install -r requirements.txt
關於部署的部分,比較建議將程式 docker 化,因為伺服器可能同時執行很多服務,如果每個服務都使用不同版本的 Python 程式,這樣伺服器一樣要裝很多不同版本的 Python 程式。 如果將程式 docker 化,就只需要在伺服器裝一套 docker 即可,這樣部署起來比較容易,環境也比較乾淨。
0 則留言