XiaO

使用 pyenv 管理 python 版本

XiaO / 2020-06-07


万事皆需理由

% which python
  /usr/bin/python

% python -V     
  Python 2.7.16

% which python3
  /usr/bin/python3

% python3 -V   
  Python 3.7.3

Homebrew 的 python 版本更新比较慢,毕竟需要众人拾柴。

pyenv

pyenv 是一个 Python 版本管理工具。pyenv 通过在 PATH 变量的最前面插入了一个垫片路径(shims)~/.pyenv/shims:$PATH,以优先在 shims 路径中查找 pyhton 的可执行文件,而 PATH 后面的文件目录则被忽略1

pyenv 管理器自身的安装

brew install pyenv

在 Terminal 中,添加如下命令,以自动补全 PATH 变量。

echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.zshrc

或直接在 shell 的配置文件 ~/.zshrc 中添加如下命令,以自动补全 PATH 变量。

if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
fi

使用 pyenv 增删 python

% pyenv install --list | grep " 3\.[89]" # 查看所有符合条件的 python 版本
  3.8.0
  3.8-dev
  3.8.1
  3.8.2
  3.9.0a5
  3.9-dev

  pyenv install 3.8.2 # 安装 3.8.2 版本
  pyenv uninstall 3.8.2 # 卸载 pyenv 安装的 3.8.2 版本
  pyenv rehash # 为所有已安装的可执行文件创建 shims,如:~/.pyenv/versions/*/bin/*。因此,每当增删了 Python 版本或带有可执行文件的包(如 pip)以后,都应该执行一次本命令
  
  pyenv which python # 显示当前使用版本 python 的安装路径

使用 pyenv 管理 python 版本

pyenv versions # 检查所有已安装可用的 python 版本
* system (set by ~/.pyenv/version)
  3.8.2

如上,可看到目前可用的两个 python 版本,一个是系统自带的版本,一个是刚才通过 pyenv 安装的更高版本。* 表示当前启用的 python 版本。

pyenv global 3.8.2 # 通过将版本号写入 ~/.pyenv/version 文件设置全局 python 版本。

pyenv local 3.8.2 # 通过将版本号写入当前目录下的 .python-version 文件设置 Python 本地版本。

pyenv shell 3.8.2 # 设置 shell 的 python 版本,通过设置当前 shell 的 PYENV_VERSION
pyenv shell --unset # `--unset` 参数可取消当前 shell 设定的 python 版本

上述三个级别的设置,优先级别不同 shell > local > global。高级别的版本配置会覆盖掉低级别的版本配置。比如,local 中设置启用 A 版本的 python,global 中设置启用 B 版本的 python,shell 中未设置,则 shell 中将启用 local 中设置的 A 版本的 python。2


  1. 使用 pyenv 管理 Python 版本 ↩︎

  2. MacOS 下利用 pyenv 管理Python 版本和虚拟环境 ↩︎