如何管理 Python 版本

一台电脑上装了好几个 Python,python 命令到底跑的是哪个?项目一多,版本冲突让人抓狂——这篇文章帮你彻底解决这个问题。


# Python 版本为什么会变成一团乱麻?

如果你用 Python 开发超过半年,大概率会遇到这种场景:

  • 公司老项目要求 Python 3.8,你自己的新项目想用 3.12 的新特性
  • 装了某个库,提示"不支持当前 Python 版本"
  • 同事发来代码,跑起来报了一堆莫名其妙的语法错误——才发现他用的是 3.11,你用的是 3.6
  • 打开终端输 python --version,显示的还是多年前装的 2.7

这些问题的根源都指向同一个地方:Python 没有一个统一的"版本管理机制"

不像 Node.js 生态里大家默认会用 nvm,Python 社区长期以来缺乏一个公认的标准工具。结果就是:装一个算一个,PATH 环境变量打架,pythonpython3python3.11 傻傻分不清楚。

更麻烦的是,Python 版本更新极为活跃。截至 2026 年,官方同时维护的稳定版本就有 3.9、3.10、3.11、3.12、3.13 共五个,每个版本的生命周期大约五年。不同的项目、不同的库,对版本的要求各不相同。

没有版本管理,就是在用混乱换便利。


# pyenv 登场

pyenv(Windows 上叫 pyenv-win)是目前最主流的 Python 版本管理工具,它做了一件看起来简单、实际很优雅的事:

让你在同一台机器上安装、切换任意 Python 版本,互不干扰。

具体来说,它解决了以下几类痛点:

# 1. 多版本共存,随时切换

你可以同时安装 Python 3.9、3.11、3.12,并为不同的项目指定不同的版本。比如:

项目A/   →  Python 3.9.18(老项目,依赖旧库)
项目B/   →  Python 3.12.3(新项目,用新特性)
全局     →  Python 3.13.0(平时跑脚本用)

每个目录下只需要放一个 .python-version 文件,cd 进去之后 Python 版本就自动切换了。

# 2. 不污染系统 Python

操作系统自带的 Python(尤其是 macOS 和 Linux)很多系统工具依赖它。如果你随手 pip install 装了一堆东西进去,轻则 pip 包冲突,重则系统工具崩掉。

pyenv 把每个版本安装在自己的独立目录里,和系统 Python 完全隔离,出了问题删掉重装就行,不会伤及根本。

# 3. 团队协作版本对齐

.python-version 文件可以提交到 Git 仓库,团队所有成员克隆项目后,运行 pyenv install 就能自动安装项目指定的版本。不再出现"在我这里能跑,你那边就报错"的情况。


# 用了之后的变化

pyenv 管理 Python 之后,我最直观的感受是:

心智负担明显减轻了。

以前每次新建项目,脑子里都要绕一圈:"我现在的 Python 是哪个版本?这个版本支持 match 语句吗?装这个库会不会影响其他项目?"

用了 pyenv 之后,这些问题的答案变得清晰:版本是我主动选的,装包用虚拟环境隔离,出了问题有据可查。

另一个显著变化是:升级变得不再焦虑。以前不敢升级 Python,怕破坏现有项目的运行环境。现在直接装新版本试,不行就切回去,完全无损。


# 从安装到日常操作

# 安装 pyenv-win(Windows 用户)

最简单的方式是用 pip:

pip install pyenv-win --target "$HOME\.pyenv"

安装完成后,需要配置环境变量。打开 PowerShell 执行:

[System.Environment]::SetEnvironmentVariable("PYENV", "$HOME\.pyenv\pyenv-win\", "User")
[System.Environment]::SetEnvironmentVariable("PYENV_ROOT", "$HOME\.pyenv\pyenv-win\", "User")

$currentPath = [System.Environment]::GetEnvironmentVariable("PATH", "User")
$newPath = "$HOME\.pyenv\pyenv-win\bin;$HOME\.pyenv\pyenv-win\shims;$currentPath"
[System.Environment]::SetEnvironmentVariable("PATH", $newPath, "User")

重启终端,输入 pyenv --version,看到版本号就说明安装成功了。


# macOS / Linux 用户

用官方的一键脚本:

curl https://pyenv.run | bash

然后在 ~/.bashrc~/.zshrc 末尾加入:

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

重启终端生效。


# 日常使用:核心命令速查

① 查看可安装的版本

pyenv install --list
# 列表很长,可以过滤:
pyenv install --list | grep "3.12"

② 安装指定版本

pyenv install 3.12.8

安装过程会自动下载编译,耐心等一会儿(Windows 会下载预编译包,更快)。

③ 设置全局默认版本

pyenv global 3.12.8

之后在任何目录下,python 命令都会指向 3.12.8。

④ 给某个项目单独指定版本

cd my-project
pyenv local 3.9.18

这条命令会在当前目录生成一个 .python-version 文件,内容只有一行版本号。以后每次 cd 进这个目录,pyenv 会自动切换到对应版本。

⑤ 查看当前生效版本

pyenv version
# 输出示例:3.12.8 (set by /Users/yourname/.pyenv/version)

⑥ 查看所有已安装版本

pyenv versions
# 输出示例:
#   3.9.18
# * 3.12.8 (set by global)
#   3.13.0

⑦ 卸载不需要的版本

pyenv uninstall 3.9.18

# 搭配虚拟环境使用(强烈推荐)

pyenv 解决的是 Python 解释器版本的问题,而项目间 第三方库的隔离,还需要虚拟环境来配合。

推荐的组合方式:

# 进入项目目录
cd my-project

# 用 pyenv 指定 Python 版本
pyenv local 3.12.8

# 创建虚拟环境
python -m venv .venv

# 激活虚拟环境
# Windows:
.venv\Scripts\activate
# macOS/Linux:
source .venv/bin/activate

# 安装依赖(只影响这个虚拟环境,不影响全局)
pip install requests pandas

这套组合下来,每个项目用独立的 Python 版本 + 独立的依赖包,互相之间完全隔离,无论开发多少个项目,环境都是干净的。


# 常见问题

Q:pyenv 和 conda 有什么区别,该用哪个?

A:conda 是 Anaconda 生态的一部分,更适合数据科学方向,自带包管理和虚拟环境,但体积大、有时候与 pip 生态有摩擦。pyenv 更轻量,只专注版本管理,适合通用开发场景。如果你主要做 Web 开发或自动化脚本,用 pyenv 更合适;如果做机器学习,conda 也是主流选择。

Q:切换版本后,原来装的库还在吗?

A:不在。每个 Python 版本有自己独立的库目录,切换后需要重新安装。这也是建议搭配虚拟环境的原因——虚拟环境把库安装在项目目录里,和解释器版本绑定,切换无忧。

Q:Windows 上 pyenv 命令提示找不到怎么办?

A:检查两点:① 环境变量是否配置正确(PYENVPATH);② 是否重启了终端。环境变量修改需要重新打开终端窗口才会生效。


# 写在最后

Python 版本混乱的问题,很多人忍了很久,觉得"凑合能用就行"。但随着项目增多,这个问题会越来越明显地拖慢你的效率——不是因为你技术不好,而是工具没用对。

pyenv 不复杂,核心命令就那么几个,花半小时配好之后,换来的是长期的清晰和可控。

好的工具不是让你变厉害,而是让你不再被不必要的麻烦分心。

把时间花在真正重要的代码上,Python 版本的事,交给 pyenv 就好。


如有疑问欢迎在评论区交流 👇