Python 版本管理利器 pyenv 简明教程

引言

实际工作中,我们通常会面临多个 python 版本共存的问题。例如 MacOS 自带的 Python 版本为2.7, 而为了开发需要安装 Python3。如果你为管理多个 Python 版本摸不着头绪,那么本文介绍的 pyenv 以及其插件 pyenv-virtualenv就是为你而准备的。

  • pyenv:管理系统中不同的 Python 版本。
  • pyenv-virtualenv:管理为不同项目而设置不同的虚拟工作环境。

    环境

  • MacOS Mojave 10.14.6
  • zsh 5.3 (x86_64-apple-darwin18.0)

pyenv 安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 通过 github 安装
git clone https://github.com/pyenv/pyenv.git ~/.pyenv

# 配置环境变量
# 注意:shell 如果是 bash,.zshrc 替换为 .bash_profile
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc

# 重要:确保配置 pyenv init 在 shell 启动配置文件最后一行, 以操作 PATH 启用 shim
# -e 参数表示
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.zshrc

# 重启 shell, 使配置生效
exec "$SHELL"

安装并配置新的 Python 版本

安装依赖

1
2
3
4
5
6
7
8
# 1. 安装 Xcode Command Line Tools
xcode-select --install
# 2. 安装 Homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
# 3. 安装依赖
brew install openssl readline sqlite3 xz zlib
# 4. 如果 Mojave 以上版本(10.14+), 需要安装额外的 SDK headers
sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

安装新的 python 版本 3.7.0

1
2
3
4
5
6
7
8
9
# 列出所有可安装的版本
pyenv install --list | grep 3.7

# 安装 3.7.0
# -v 显示安装详情
pyenv install -v 3.7.0

# 列出已安装的版本, 当前版本 * 标识
pyenv versions

设置新安装的 python 版本

三种方式:全局(global),文件夹局部(local),仅当前 shell(shell)会话。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 方式1 全局(global), 设置后启动所有 shell 都默认此版本
# 原理是在 ~/.pyenv/version 中写入版本
pyenv global 3.7.0
# 查看当前版本 为 3.7.0
pyenv version
python --version
cat ~/.pyenv/version

# 方式2 文件夹局部(local), 为当个目录及其所有的子目录设置 python 版本。
# 原理是在当前目录下创建.python-version文件并写入版本
mkdir test-3.7.0 && cd test-3.7.0
pyenv local 3.7.0
# 查看当前版本 为 3.7.0
python --version
cat ./.python-version

# 方式3 当前 shell(shell)会话。
# 原理是设置环境变量PYENV_VERSION为所需版本
pyenv shell 3.7.0
# 查看当前版本 为 3.7.0
python --version
echo $PYENV_VERSION

pyenv-virtualenv

pyenv-virtualenv 安装

1
2
3
4
5
6
# 通过 git 安装
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
# 设置virtualenvs的自动激活,就是当你进入到你自己设置过的Python版本的目录下,自动激活virtualenvs的模式
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
# 重启 shell, 使配置生效
exec "$SHELL"

pyenv-virtualenv 配置及使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 创建 virtualenv,指定 Python 版本 3.7.0
pyenv virtualenv 3.7.0 venv-3.7.0
# 列出创建的所有的 virtualenv
# 每个virtualenv有两个条目(例如 venv-3.7.0 与 3.7.0/envs/venv-3.7.0),较短的一个只是一个符号链接。
pyenv virtualenvs

# 激活 venv, 两种方式,方式1与方式2
mkdir test-venv && cd test-venv
# 方式1 自动激活, 退出目录自动失效
pyenv local venv-3.7.0

# 方式2 手动激活, 退出目录仍有效,需要deactivate
cd .. && rm test-venv/.python-version && cd test-venv
pyenv activate venv-3.7.0
# 失效
pyenv deactivate

# 删除 virtualenv, 输入 y
pyenv uninstall venv-3.7.0
# 确认
pyenv virtualenvs

在 PyCharm 中配置 pyenv-virtualenv

  1. 启动 pycharm, 载入工程。
  2. 依次选择 Pycharm - Preference - Project:工程名 - Project Interpreter
  3. 在右侧Project Interpreter点击下拉箭头 - show all - 点右下角 + 增加
  4. 在弹出框中左侧选择 Virtualenv Environment, 右侧Check上 Existing environment 选择虚拟环境Python解析器 /Users/admin/.pyenv/versions/venv-3.7.0/bin/python

参考资料

与我一起,传播价值!