pyenv怎么安装和切换python版本

阿麦
阿麦
发布时间:2026-11-13 | 4人浏览过
原创

详细介绍pyenv在macOS和Linux系统下的安装方法、Shell环境变量配置、编译安装指定Python版本的步骤,以及使用global、local和shell命令切换与验证Python版本的完整流程。

假设你的电脑上同时有两个项目:一个维护中的旧服务依赖 Python 3.8,另一个新项目需要使用 Python 3.12。如果直接覆盖系统自带的 Python,往往会导致系统工具或旧项目无法运行。使用 pyenv 可以把多个版本的 Python 安装在用户目录下的独立文件夹中互不干扰,并通过 pyenv global、pyenv local 和 pyenv shell 三条命令按全局、项目目录或当前终端会话灵活切换。

下面按实际操作顺序,说明在 macOS 与 Linux 系统中如何准备编译依赖、安装 pyenv、配置 Shell 环境变量、安装目标 Python 版本,以及切换和验证当前生效版本。

一、先理解 pyenv 切换版本的基本原理

很多初次使用 pyenv 的人会跳过环境变量配置,或者疑惑为什么切换版本后不用修改系统文件。理解它的工作方式,能帮你避开大多数配置失效的问题。

pyenv 本身不修改系统目录中的 Python,而是将每个安装好的版本放在 ~/.pyenv/versions/ 下的独立子目录里,例如 ~/.pyenv/versions/3.12.3/。同时,pyenv 会在系统 PATH 环境变量的最前面插入一个名为 ~/.pyenv/shims 的垫片目录。

当你在终端里输入 python 或 pip 时,系统会优先命中 shims 目录中的同名脚本。该脚本会依次检查当前终端变量、当前目录以及用户全局配置,确定这次该用哪个版本号,再把命令转发给对应的真实可执行文件。

pyenv怎么安装和切换python版本
图 1:pyenv 通过 shims 垫片和四级优先级转发 Python 命令

二、安装前的环境准备

原生 pyenv 面向 macOS 和 Linux 系统设计,采用源码下载后在本地编译的方式安装 Python。如果使用的是 Windows 系统,需要改用独立的 pyenv-win 项目,命令与配置方式不同,不在本篇操作范围内。

由于 pyenv 会在本地编译 Python 源码,动手安装 pyenv 之前,需要先装齐编译器和常见的系统库头文件,否则后续安装 Python 时容易出现缺少 zlib、openssl 或 sqlite3 的报错。

macOS 准备步骤

打开 macOS 的“终端”应用,先安装 Xcode 命令行工具,再使用 Homebrew 安装编译所需的依赖库:

终端命令(macOS)
xcode-select --install
brew install openssl readline sqlite3 xz zlib tcl-tk

如果系统已经安装过 Xcode 命令行工具,执行第一条命令后会提示已安装,直接运行第二条 brew install 命令即可。

Ubuntu / Debian 准备步骤

在 Ubuntu 或 Debian 终端中,先更新软件源索引,再安装编译工具链和基础开发库:

终端命令(Ubuntu / Debian)
sudo apt update
sudo apt install -y build-essential libssl-dev zlib1g-dev \
  libbz2-dev libreadline-dev libsqlite3-dev curl git \
  libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

如果你使用的是 CentOS、RHEL 或 Fedora 等基于 dnf / yum 的发行版,需要安装对应的 gcc、make 以及 zlib-devel、openssl-devel 等 -devel 结尾的开发包,具体列表可在 pyenv 官方 GitHub 仓库的 Build Environment 文档中核对。

三、安装 pyenv 并配置 Shell 环境

准备好依赖后,安装 pyenv 分为两步:下载程序本体,以及把环境变量写入 Shell 配置文件。完成这两步并重载终端后,pyenv 才能正常拦截和切换版本。

pyenv怎么安装和切换python版本
图 2:安装 pyenv 并配置 Shell 环境变量的四个步骤

1. 安装 pyenv 本体

在 macOS 上直接使用 Homebrew 安装最省事,命令如下:

终端命令(macOS)
brew install pyenv

在 Linux 上,通常使用官方提供的安装脚本直接克隆到 ~/.pyenv 目录:

终端命令(Linux)
curl -fsSL https://pyenv.run | bash

该脚本会同时安装 pyenv 核心程序及常用的 pyenv-virtualenv 等配套插件;如果需要核对最新安装说明,可以在 GitHub 上查阅 pyenv/pyenv 官方仓库的 README。

2. 配置 Shell 启动文件

安装完成后,必须把 pyenv 的路径和初始化脚本加入 Shell 配置文件,否则终端找不到 pyenv 命令,也无法激活 shims 垫片。

先用 echo $SHELL 确认你当前使用的 Shell。macOS 默认通常是 /bin/zsh(Zsh),大多数 Linux 发行版默认是 /bin/bash(Bash)。

如果使用的是 Zsh,将下面三行追加到用户主目录下的 ~/.zshrc 文件末尾:

写入 ~/.zshrc(Zsh 用户)
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init - zsh)"

如果使用的是 Bash,将下面三行追加到 ~/.bashrc(若为 macOS 上的 Bash 登录终端,还需同步检查 ~/.bash_profile 是否加载了 ~/.bashrc):

写入 ~/.bashrc(Bash 用户)
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init - bash)"

注意位置差异:如果你在 macOS 上通过 Homebrew 安装 pyenv,pyenv 命令本身已经位于 Homebrew 的路径中,但依然建议保留上面的 PYENV_ROOT 和 eval "$(pyenv init - ...)",因为它们负责将 ~/.pyenv/shims 放到 PATH 最前面。

3. 重载终端并验证

保存配置文件后,重新打开一个终端窗口,或者在当前终端执行以下命令重启 Shell 会话:

终端命令
exec "$SHELL"

接着运行版本查询命令,确认 pyenv 已可正常调用:

终端命令
pyenv --version
示例输出(具体版本号以当前安装结果为准)
pyenv 2.4.12

四、使用 pyenv 安装指定的 Python 版本

在切换版本之前,先要把需要的 Python 解释器安装到本地。下面以常见的 Python 3.11 和 3.12 系列为例,展示从查找可安装版本到验证安装结果的完整过程。

pyenv怎么安装和切换python版本
图 3:从查询列表、编译安装到切换验证的完整操作路径

1. 查看可安装的 Python 版本

pyenv 支持安装的标准 CPython、Anaconda、PyPy 等解释器非常多,直接列出全部内容会很长,通常配合 grep 筛选出自己需要的大版本:

终端命令
pyenv install --list | grep -E "^\s*3\.(11|12)\."
示例输出(具体小版本号以当前命令实际返回为准)
  3.11.8
  3.11.9
  3.12.2
  3.12.3

2. 下载并编译安装目标版本

从上面的列表中选定精确版本号,然后执行 pyenv install。例如安装 3.11.9 和 3.12.3:

终端命令
pyenv install 3.11.9
pyenv install 3.12.3

执行期间 pyenv 会从 Python 官方源下载源码压缩包并在本地编译,通常需要几分钟。若出现连续几分钟无新输出,属于正在编译的正常现象,不要随意按 Ctrl+C 中断;如果下载阶段长时间卡住,通常是网络访问源码镜像较慢所致。

版本提示:你也可以只输入主次版本号(如 pyenv install 3.12),较新版本的 pyenv 会自动匹配该分支最新的稳定小版本。不过在团队协作时,建议明确写出完整三位版本号,方便成员保持环境一致。

3. 查看本地已安装的版本

安装完成后,用 pyenv versions(注意末尾是复数 versions)检查目前机器上有哪些可用版本:

终端命令
pyenv versions
示例输出
* system (set by /Users/demo/.pyenv/version)
  3.11.9
  3.12.3

输出中带有星号 * 的一行,表示当前正在生效的 Python 版本。此时还没有切换,因此默认指向 system(系统自带 Python)。

五、切换 Python 版本的三种方式与验证

pyenv 提供了三条切换命令,分别对应“当前终端会话”、“指定项目目录”和“用户全局默认”三种不同作用域。理解它们的生效范围和优先级,就能灵活应对不同项目。

pyenv怎么安装和切换python版本
图 4:pyenv 三种切换命令的作用域对比与切换失效排查要点

1. 切换全局默认版本:pyenv global

如果你想把 3.12.3 设为日常打开终端时的默认 Python 版本,运行 pyenv global:

终端命令
pyenv global 3.12.3

这条命令会把版本号写入 ~/.pyenv/version 文件中。此后在任何未单独指定版本的目录下,都会默认使用 3.12.3。如果以后需要退回系统默认 Python,可以执行 pyenv global system。

2. 为单个项目目录切换版本:pyenv local

回到开头的场景:全局已经设为 3.12.3,但旧项目目录 ~/projects/legacy-api 必须运行在 3.11.9 上。进入该项目根目录后执行 pyenv local:

终端命令
cd ~/projects/legacy-api
pyenv local 3.11.9

执行后,当前目录下会生成一个隐藏文件 .python-version(内容就是 3.11.9)。以后只要 cd 进入该目录或其子目录,Python 会自动切换为 3.11.9;离开该目录后,又会自动恢复为全局的 3.12.3。如果想取消该目录的独立设置,运行 pyenv local --unset(会删除 .python-version 文件)。

3. 临时切换当前终端会话:pyenv shell

如果你只是想在当前终端窗口里临时用另一个版本跑一次脚本,不希望修改项目文件或全局配置,可以使用 pyenv shell:

终端命令
pyenv shell 3.11.9

它的原理是在当前终端进程中设置环境变量 PYENV_VERSION。因为优先级最高,它会暂时覆盖 local 和 global 的设置;关闭终端窗口或者执行 pyenv shell --unset 后就会失效。

4. 验证切换是否真正生效

切换完成后,建议同时用下面三条命令确认路径和版本,不要只看 pyenv version 的提示:

终端命令
pyenv version
which python
python --version
示例输出
3.11.9 (set by /Users/demo/projects/legacy-api/.python-version)
/Users/demo/.pyenv/shims/python
Python 3.11.9

当 which python 返回的路径位于 ~/.pyenv/shims/python,且 python --version 输出与目标一致时,说明切换已经完全生效;对应的 pip 也会同步指向该版本下的 pip。

六、安装与切换过程中的常见问题

下面列出几个在使用 pyenv 安装或切换阶段最容易遇到的问题,按出现频率排查即可。

常见现象 主要原因 处理方法
执行 pyenv 提示 command not found Shell 启动文件未配置,或修改错了配置文件 确认 echo $SHELL 结果,Zsh 修改 ~/.zshrc,Bash 修改 ~/.bashrc,保存后执行 exec "$SHELL"
已执行 pyenv global 或 local,但 python --version 没变化 shims 目录未排在 PATH 最前面,或被高优先级设置覆盖 运行 which python,若仍指向 /usr/bin/python 等系统路径,检查初始化命令是否写在配置文件末尾;若 pyenv version 显示 PYENV_VERSION,执行 pyenv shell --unset
pyenv install 编译失败,报错缺少 ssl、zlib 或 sqlite3 安装 Python 前缺少对应的系统开发头文件 补齐第二节列出的编译依赖库后,重新执行 pyenv install <版本号>
安装了第三方库提供的命令行工具(如 pytest)却找不到 旧版 pyenv 未刷新垫片索引 使用 pip install 安装带可执行命令的包后,运行一次 pyenv rehash 更新 shims

如果后续需要清理不再使用的旧版本,直接执行 pyenv uninstall <版本号>(例如 pyenv uninstall 3.11.9)即可将该版本的独立目录完整删除,不会影响其他已安装的 Python 版本。

相关专题:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表