简介

Pyenv 是一款 Python 的版本管理工具,是使用纯 Shell 脚本编写的。

Terminal output example

Pyenv 的主要功能:

  1. 安装多个 Python 版本:用户可以轻松安装各种版本的 Python,包括官方的 CPython、Anaconda、PyPy 等。
  2. 版本切换:通过简单的命令,用户可以在全局项目shell 会话中切换 Python 版本。
  3. 虚拟环境支持:结合 ⁠pyenv-virtualenv 插件,用户可以创建和管理虚拟环境,更加方便地隔离项目依赖。
  4. 简化管理:提供简单的命令行工具,使得安装、卸载和切换 Python 版本变得更加直观。

如何安装

1. 获取Pyenv

  • macOS:

    brew update
    brew install pyenv
    
  • 自动安装器,用于包括 macOS 和 Linux 在内的类 Unix 系统:

    curl https://pyenv.run | bash
    

    如果通过这种方式安装,可能需要安装必要的构建工具。

    https://github.com/pyenv/pyenv/issues/2888

    sudo apt install build-essential libssl-dev zlib1g-dev \
    libbz2-dev libreadline-dev libsqlite3-dev curl \
    libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
    

2. 设置环境变量

如果使用 zsh, 将以下文本添加至~/.zshrc~/.zprofile 中。bash同理。

export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

注:如果有更多需求,请看原文

比如,有些系统(如Cent OS)的 bash 可能会进入无限循环。Debian/Ubuntu 无此问题。

3. 重启 shell

或者

source ~/.zshrc

使用指南

安装一个 Python 版本。

pyenv install 3       # 安装最新的 3.x.x
pyenv install 3.13    # 安装最新的 3.13.x
pyenv install 3.13.2  # 安装指定的

当然,你也可以使用 pyenv install -l 来看所有可用的版本,特别是其他 python 的各种分支。

使用 pyenv latest -k <prefix> 可以查看某个前缀在安装的时候会被补全为什么样子。

当使用不完全的前缀的时候,pyenv install 安装最新的可用版本,其他指令对应的是最新的已安装的版本。

切换 Python 版本。

使用以下指令可以用来切换 pyenv 安装的 python,优先级从上到下依次降低。

如果版本指定的是 system,或者没有指定,则使用系统自带的python。

  • pyenv shell:仅对当前 shell 会话生效,优先级最高。

    原理:export PYENV_VERSION=<version>

  • pyenv local:对当前目录及其子目录生效。

    原理:对 ./.python-version 文件进行写入,对当前目录或者最近的父目录进行读取。

  • pyenv global:对当前用户生效。

    原理:对 $PYENV_ROOT/version 文件进行写入和读取。

更多用法,请看:https://github.com/pyenv/pyenv/blob/master/COMMANDS.md

或者 pyenv help shell/local/global

卸载 Python 版本。

pyenv uninstall <version>

更新 Pyenv

更新可以获取最新的 Python 版本列表。

  • 如果是 brew 安装的:brew upgrade pyenv
  • 否则:pyenv update

Pyenv-virtualenv

Github 地址

安装

**Brew: ** 如果 pyenv 是通过 brew 安装的,则该插件也使用 brew 安装

brew install pyenv-virtualenv

否则,使用如下方法。

git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

安装完毕之后,在shell 的 .rc 文件中添加:

eval "$(pyenv virtualenv-init -)"

创建虚拟环境

pyenv virtualenv <python_version> <vertualenv_name>
# or 
pyenv virtualenv <vertualenv_name> # 使用当前激活的 python 版本

激活虚拟环境

创建后,如果使用pyenv local <name>,则下次会自动激活该虚拟环境。

pyenv activate <name> # 作用和 pyenv shell <name> 差不多,但是后者无法被 deactivate
pyenv deactivate

删除虚拟环境

pyenv uninstall <name>
# or
python virtualenv-delete <name>