Python 版本管理/虚拟环境:Pyenv 安装 & 使用
简介
Pyenv 是一款十分流行的 Python 版本管理工具,是使用纯 Shell 脚本编写的。
Pyenv 的主要功能:
- 安装多个 Python 版本:用户可以轻松安装各种版本的 Python,包括官方的 CPython、Anaconda、PyPy 等。
- 版本切换:通过简单的命令,用户可以在全局、项目或 shell 会话中切换 Python 版本。
- 虚拟环境支持:结合 pyenv-virtualenv 插件,用户可以创建和管理虚拟环境,更加方便地隔离项目依赖。
- 简化管理:提供简单的命令行工具,使得安装、卸载和切换 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
如果需要使用虚拟环境,可以安装这个插件。
安装
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>