pyenv 管理Python环境¶
概要: 使用pyenv工具管理多个版本的Python环境
创建时间: 2023.03.22 00:42:08
更新时间: 2023.11.13 23:18:38
安装配置pyenv¶
安装依赖¶
参考install pyenv,首先需要安装依赖
macOS
Bash | |
---|---|
Debian Linux
Bash | |
---|---|
RedHat Linux
Bash | |
---|---|
Alpine Linux
Bash | |
---|---|
安装pyenv¶
使用下面的命令可以安装pyenv及其官方插件
Bash | |
---|---|

其中包含
pyenv
主要工具pyenv-virtualenv
插件,管理基于pyenv的虚拟环境pyenv-update
插件,检查pyenv更新pyenv-doctor
插件,检查pyenv的依赖是否已安装pyenv-installer
插件,安装卸载指定版本Python
更新pyenv¶
警告
需要安装update插件
Bash | |
---|---|
卸载pyenv¶
Bash | |
---|---|
警告
注意移除掉下面小节在shell中注入的环境变量和命令
使用brew管理pyenv¶
安装
Bash | |
---|---|
Bash | |
---|---|
警告
使用通用脚本安装的pyenv,不能使用brew进行更新!
检查是否正确安装¶
警告
需要安装doctor插件
Bash | |
---|---|

查看版本¶
Bash | |
---|---|

配置shell环境¶
为保证pyenv工具的正常工作,需要在shell启动时注入部分环境变量,并初始化pyenv,详细参考pyenv/pyenv: Simple Python version management
此处以zsh环境为例,bash类似
Bash | |
---|---|
刷新shell 如果要使当前终端生效,需要重启或刷新shell环境
Bash | |
---|---|
配置国内源¶
【可选,建议】
考虑到国内Python官方源速度较慢,可以考虑使用国内淘宝源进行替代,在使用的shell环境中增加注入如下环境变量
Bash | |
---|---|
环境变量¶
PYENV_ROOT
: 更改 pyenv 的默认安装地址PYTHON_BUILD_MIRROR_URL
: 下载 Python 源码时的镜像地址PYTHON_BUILD_MIRROR_URL_SKIP_CHECKSUM
: 是否在编译 Python 时跳过文件校验和PYTHON_BUILD_ARIA2_OPTS
: 下载 Python 源码时使用的 aria2 参数(通过设置为--check-certificate=false
,可以解决下载过程中的证书问题)PYTHON_BUILD_HTTP_CLIENT
: 下载 Python 源码时使用的 http 客户端,支持curl
,wget
和aria2
,默认为curl
更多的环境变量参考此处
使用pyenv¶
所有的pyenv命令行均可以在pyenv/COMMANDS.md找到
查看所有可安装版本¶
Bash | |
---|---|
install 安装指定版本¶
Bash | |
---|---|
关于版本号 x.y.z
- 如果未指定小版本 y 或者补丁版本 z,那么将会安装最新大/小版本
- pyenv install 3 会安装最新的 Python 3.11.2 版本
- pyenv install 3.9 会安装最新的 Python 3.9.16 版本
uninstall 移除指定版本¶
Bash | |
---|---|
global 指定默认版本¶

local 指定当前app环境版本¶


which 查看当前工具路径¶
下面的命令查看当前shell中pip工具的路径
Bash | |
---|---|
Bash | |
---|---|
Bash | |
---|---|

可以看到pyenv定位到的是当前shell中Python环境的可执行命令行工具的实际路径
shell 以某个版本启动shell¶
Bash | |
---|---|

version 查看当前使用版本¶
Bash | |
---|---|

versions 查看系统所有版本¶
Bash | |
---|---|

其中带
*
号的是当前环境的所用版本那么如何理解系统中众多的Python环境版本?
参考下图(图源RealPython)

- 底层是系统自带的Python环境
- 其次是pyenv的global环境(在
~/.pyenv/version
文件描述) - 再者是pyenv的local环境(在shell启动时路径的
.python-version
文件描述) - 最后也就是最上层的手动调起的pyenv环境(通过pyenv调起的环境,通过环境变量
$PYENV_VERSION
描述)
虚拟环境¶
警告
需要安装virtualenv插件
创建虚拟环境¶
指定版本号¶
不指定版本号¶
如果在 virtualenv
后没有版本号参数那么创建的虚拟环境将基于当前使用的Python版本
Bash | |
---|---|

激活虚拟环境¶
Bash | |
---|---|
退出虚拟环境¶
Bash | |
---|---|

查看虚拟环境¶
Bash | |
---|---|

删除虚拟环境¶
Bash | |
---|---|

FAQ¶
pyenv安装Python时提示 ModuleNotFoundError: No module named '_tkinter'¶
Bash | |
---|---|
pyenv安装Python时提示 ModuleNotFoundError: No module named '_sqlite3'¶
解决方法,添加对应的包即可
Bash | |
---|---|
更多¶
几乎每一种语言都有自己的依赖包管理系统,如何能“简化”这些操作,可以了解一下asdf工具,它可以管理Ruby, Node.js, Elixir, Erlang, Python等众多语言的依赖包