使用 pyenv 管理 python 版本
XiaO / 2020-06-07
万事皆需理由
- macOS Catalina 自带 python 2.x 与 3.x,以为系统自身服务。
% which python
/usr/bin/python
% python -V
Python 2.7.16
% which python3
/usr/bin/python3
% python3 -V
Python 3.7.3
- Homebrew 的更新
Homebrew 的 python 版本更新比较慢,毕竟需要众人拾柴。
- 其实真想吐槽,为什么 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