使用 uv 管理多版本 Python:告别版本冲突的终极指南

在现代 Python 开发中,我们经常需要同时处理多个项目,每个项目可能依赖不同版本的 Python。传统的版本管理方式往往让人头疼,直到遇到了 uv —— 一个革命性的 Python 包管理器和工具链。

为什么需要多版本 Python?

想象一下这些场景:

  • 维护一个遗留项目,它只支持 Python 3.8
  • 在新项目中想要体验 Python 3.13 的最新特性
  • 测试你的开源库在不同 Python 版本下的兼容性

没有合适的工具,这些需求会变成一场配置的噩梦。

uv 的解决方案:简洁而强大

安装 Python 版本

# 安装单个版本
uv python install 3.9.0

# 一次性安装多个版本
uv python install 3.9.0 3.10.0 3.11.0

# 安装最新版本
uv python install 3.13

查看可用版本

# 查看所有可安装的版本
uv python list

# 查看已安装的版本
uv python list --only-installed

揭秘:uv 把 Python 安装到哪里?

uv 采用集中式管理,将所有 Python 版本安装在统一位置:

  • Linux/macOS: ~/.local/share/uv/toolchains/
  • Windows: %APPDATA%\uv\toolchains\

目录结构清晰明了:

~/.local/share/uv/toolchains/
├── cpython-3.9.0-linux-x86_64/
├── cpython-3.10.0-linux-x86_64/
├── cpython-3.11.0-linux-x86_64/
└── cpython-3.13.0-linux-x86_64/

这种设计确保了不同版本的完全隔离,避免了系统 Python 环境的污染。

实战:如何高效使用多版本 Python

方案一:为每个项目指定 Python 版本

# 进入项目目录
cd my-legacy-project

# 使用 Python 3.9 创建虚拟环境
uv venv --python 3.9.0

# 激活环境
source .venv/bin/activate  # Linux/macOS
# 或者 .venv\Scripts\activate  # Windows

# 验证版本
python --version  # Python 3.9.0

方案二:直接运行特定版本

# 不需要激活环境,直接运行
uv run --python 3.9.0 legacy_script.py
uv run --python 3.13 new_feature_script.py

方案三:在配置文件中锁定版本

pyproject.toml 中声明:

[project]
name = "my-project"
requires-python = ">=3.9"

[tool.uv]
python = "3.9.0"

这样,每次在该项目目录下使用 uv 命令时,都会自动使用 Python 3.9.0。

方案四:设置全局默认版本

# 设置默认 Python 版本
uv python pin 3.11.0

# 之后创建的虚拟环境默认使用 3.11.0
uv venv

真实工作流示例

让我们看一个完整的开发场景:

# 1. 维护遗留项目
cd legacy-app
uv venv --python 3.9.0
uv add django==3.2
source .venv/bin/activate

# 2. 开发新项目
cd ../modern-app
uv venv --python 3.13
uv add fastapi starlette
source .venv/bin/activate

# 3. 快速测试兼容性
uv run --python 3.9 script.py
uv run --python 3.10 script.py
uv run --python 3.11 script.py

uv 的优势总结

  1. 极速安装:比 pyenv 和官方安装包快数倍
  2. 零配置:开箱即用,无需复杂的环境变量配置
  3. 完全隔离:不同版本互不干扰
  4. 跨平台一致:在 Windows、macOS、Linux 上行为一致
  5. 生态集成:与现代 Python 工具链完美融合

进阶技巧

批量安装常用版本

# 一次性安装常用的 Python 版本
uv python install 3.8.0 3.9.0 3.10.0 3.11.0 3.12.0

清理不再需要的版本

# 手动删除特定版本
rm -rf ~/.local/share/uv/toolchains/cpython-3.8.0-*

结语

uv 彻底改变了 Python 版本管理的方式。无论你是维护多个项目的资深开发者,还是刚刚开始学习 Python 的新手,uv 都能让你的开发体验更加顺畅。

告别版本冲突,拥抱高效的 Python 开发新时代!

尝试一下 uv,你会发现:原来管理 Python 版本可以如此简单!


小提示:uv 不仅仅是 Python 版本管理器,还是极快的 Python 包管理器,可以替代 pip 和 pip-tools。但那就是另一个故事了…

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐