如何管理 python 的各種版本 | 使用 pyenv 和 virtualenv

Min
Becoming a data scientist
6 min readDec 3, 2019

在使用 python 時,我們常常需要不同的 python 版本。另外,身為一個潔癖者,總是想要刪除和管理 python 的安裝套件,希望他能夠維持一個乾淨的環境。因此,我們需要使用 pyenvvirtualenv

  • pyenv用來管理 python 版本, virtualenv 是管理 python packages

以下都是使用 Mac OS 的環境

Pyenv

  • 使用 homebrew 安裝:brew install pyenv
  • 設定環境變數,如果使用 bash 請把以下指令貼到 ~/.bashrc~/.bash_profile,使用 zsh 則貼到 ~/.zshrc
# pyenv
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
if which pyenv > /dev/null;
then eval "$(pyenv init -)";
fi
  • 接著,重新啟動 SHELL:exec $SHELL

Pyenv 常用命令

  • 查看可安裝的 python 版本: pyenv install -l
  • 查看已安裝的 python 版本:pyenv versions
  • 存放位置: ~/.pyenv/versions
  • 安裝 python:pyenv install <version> # <version> 是想要安裝的python 版本號
  • 刪除 python:pyenv uninstall <version>

Python 版本管理

pyenv global <version>
pyenv local <version>
pyenv shell <version>
  • pyenv global <version>:全局設置python為指定版本,將版本號寫入 ~/.pyenv/version
  • pyenv local <version>:設置當前路徑下 python 版本為指定版本,將指定的版本號寫入當前目錄下的 .python-version,設置的 python 版本會比 global 高
  • pyenv shell <version>:將當前 shell 窗口的 python 設定為指定版本,設置當前 shell 的 PYENV_VERSION。比 global 和 local 都要高。可以透過 -unset以取消目前 shell 的版本

[2021.3.16 補充]

不知道為什麼 mac 升上 11.1 之後,pyenv install就不能用了,如果有一樣困擾的人,可以試試看以下面的指令安裝 python 版本看看,記得把其中的 3.6.6 換成自己想安裝的版本

CFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix bzip2)/include -I$(brew --prefix readline)/include -I$(xcrun --show-sdk-path)/usr/include" LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix readline)/lib -L$(brew --prefix zlib)/lib -L$(brew --prefix bzip2)/lib" pyenv install --patch 3.6.6 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)

Virtual Environments

  • 安裝: pip3 install virtualenv virtualenvwrapper
  • 設定環境變數,如果使用 bash 請把以下指令貼到 ~/.bashrc~/.bash_profile,使用 zsh 則貼到 ~/.zshrc
# pyenv-virtualenv
if which pyenv-virtualenv-init > /dev/null;
then eval "$(pyenv virtualenv-init -)";
fi
# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3
source /usr/local/bin/virtualenvwrapper.sh
  • 接著,重新啟動 SHELL:exec $SHELL

virtualenv 的常用指令

  • 移動到專案資料夾
  • 創建一個虛擬環境,在 <ENV_NAME> 中填入任何你想要取的名字,我在這邊取名叫 my_env
# 使用環境預設的 Python 版本
virtualenv <ENV_NAME>
virtualenv myenv
# 利用 pyenv 創建的 Python 指定版本
virtualenv -p ~/.pyenv/versions/3.6.6/bin/python my_env
  • 啟動虛擬環境:source my_env/bin/activate
python3 --version
>> Python 3.6.6
which python
>> /Users/smhsu/env_practice/my_env/bin/python
  • 退出虛擬環境:deactivate

經過以上步驟之後,我們就可以自由變換不同 Python 版本和安裝虛擬環境了。但是,如果只使用 virtualenv,我們需要在每次創建專案資料夾時,都重複生成一個新的虛擬環境,十分不便。

因此,以下我們介紹一個很方便的套件 virtualenvwrapper ,能夠幫助我們集中管理並且複製環境。

如果你完全按照上面的安裝步驟,會發現我們已經偷偷安裝好virtualenvwrapper了,再來來看如何使用吧。

virtualenvwrapper 的常用指令

  • 建立虛擬環境
# 使用環境預設的 Python 版本
mkvirtualenv <ENV_NAME>
virtualenv myenv
# 利用 pyenv 創建的 Python 指定版本
mkvirtualenv -p ~/.pyenv/versions/3.6.6/bin/python3 my_env
  • 查看已安裝的虛擬環境:lsvirtualenv
  • 刪除虛擬環境:rmvirtualenv <ENV_NAME>
  • 啟動虛擬環境:workon <ENV_NAME>
  • 退出虛擬環境:deactivate

參考資料

感謝你的收看,如果對你有幫助的話,別忘了給我拍手鼓勵哦 👏🏼

--

--