pyenv 能够同时管理多个 Python 版本,一键切换默认版本,Pyenv 是 rbenvruby-build 分支的 Python 实现。

举例 Ubuntu Server 16.04 LTS 环境下的安装和使用

安装

2019-01-04 更新

pyenv-installer 是项目官方新发布的 pyenv 安装脚本,一条命令就可以完成各项设置。

Install:

$ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

Update:

$ pyenv update

Uninstall:
pyenv is installed within $PYENV_ROOT (default: ~/.pyenv). To uninstall, just remove it:

$ rm -fr ~/.pyenv

and remove these three lines from .bashrc:

export PATH="~/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

解决依赖

$ sudo apt install build-essential libssl-dev libbz2-dev libreadline-dev zlib1g-dev libffi-dev libsqlite3-dev

1. 克隆仓库

$HOME/.pyenv 是默认推荐的安装位置

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv

2. 定义环境变量 PYENV_ROOT 并添加 $PYENV_ROOT/bin$PATH

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile

3. 添加 pyenv init 到 shell 并启用 shims 和 autocompletion

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

4. 重启 shell 让配置生效

$ exec "$SHELL"

注意事项

有些操作系统的 BASH_ENV 环境变量指向 .bashrc 文件。在这样的操作系统下应该把第3步的命令 eval "$(pyenv init -)" 写入 .bash_profile 文件。

使用

查看当前默认版本

$ pyenv versions
* system (set by /home/herald/.pyenv/version)
  3.7.0

列出可安装的版本

$ pyenv install --list

安装特定版本

$ pyenv install 3.7.0

设置默认版本

$ pyenv global 3.7.0

更新

更新至最新开发版

$ cd $(pyenv root)
$ git pull

更新指定的版本

拉取仓库变更信息,检出到指定版本的 tag 即可。

$ cd $(pyenv root)
$ git fetch
$ git tag
v0.1.0
$ git checkout v0.1.0

卸载

方法一 停用 pyenv

如果要停用 pynev 管理 python 版本,直接删除 .bash_profilepyenv init 那一段代码即可。

方法二 彻底删除

这种方法会彻底删除 pyenv 所安装的 python 版本

$ rm -rf $(pyenv root)

故障排查

zipimport.ZipImportError: can't decompress data; zlib not available

2019-04-29 更新

系统是 MacOS 10.14.4 Mojave,可以通过设定 CFLAGS 指定 zlib 的位置。

$ CFLAGS="-I$(xcrun --show-sdk-path)/usr/include" pyenv install 3.7.3

Mac OS X 上提示 zlib 不可用

$ xcode-select --install

Reference