IT&AI&DX

用uv来管理Python的多个版本、虚拟环境、库

这篇文章大约需要15分钟阅读。

常用管理工具比较

特性uvpixicondapyenv
核心定位极致高性能的 Python 全能管家跨平台的项目环境/任务管理器科学计算与复杂系统依赖管理纯粹的 Python 版本切换工具
优势速度极快、完全替代 pip/venv/pyenv统一管理 conda + PyPI 依赖兼容性极强,拥有庞大的社区库极简,只做一件事
局限无法直接安装系统级库 (如 CUDA)需要理解 conda 生态速度较慢,环境配置较重功能单一,需配合其他工具
推荐场景绝大多数纯 Python 项目需要 native 库 (GDAL/CUDA) 的项目维护需要兼容旧架构的遗留项目仅做版本管理的极简主义者

详细定位比较

1. uv (现代开发者的首选)

定位:由 Astral 开发,是当前 Python 生态中事实上的“终极替代者”。

  • 为什么用它:它用 Rust 重写了整个 Python 安装和管理流程,速度比 pip 快 10-100 倍。它内置了 Python 版本管理(替代了 pyenv)和虚拟环境管理(替代了 venv)。
  • 何时使用:适用于 90% 的场景。如果你只是写纯 Python 代码、做 Web 开发、跑 AI 模型(前提是这些库在 PyPI 上有现成的 Wheel 包),uv 是目前最丝滑、最省心的选择。

2. pixi (科学计算与 AI 复杂工程的强者)

定位:基于 conda-forge 生态,通过 Rust 实现的现代化环境管理器。

  • 为什么用它:它是“uv + conda”的结合体。当你的项目需要安装 CUDA 工具包、GDAL、HDF5 等系统级依赖时,uv 会因为找不到系统库而报错,但 pixi 可以将这些系统库和 Python 库锁定在同一个配置文件中。
  • 何时使用:如果你正在进行深度的 AI 研发、地理信息处理或跨平台项目,且需要确保团队每个人的开发环境(包括系统级的库)完全一致,pixi 是目前的最优解。

3. conda (经典的行业标准)

定位:长期以来的科研与数据科学标准工具。

  • 现状:虽然 conda 解决了跨语言依赖问题,但其冷启动慢、环境解析复杂等问题在现代开发中显得略为笨重。
  • 何时使用:除非你有极其复杂的遗留项目依赖于特定的 conda 环境结构,或者你的公司内部基础设施完全基于 conda 构建,否则在 2026 年,新项目通常会优先考虑 pixi (它兼容 conda-forge 但体验更好)。

4. pyenv (逐渐淡出的专职工具)

定位:Python 版本管理工具。

  • 现状:在 uv 出现之前,它是必不可少的。但现在 uv 已经内置了完全兼容的 Python 版本下载和切换功能(uv python install),你不再需要额外维护一个 pyenv
  • 何时使用:目前基本没有新需求。如果你不需要任何包管理功能,只想极其严格地控制系统层面的 Python 版本,它依然可用,但不再是主流推荐。

卸载全局Python

若你跟我一样,已决定全盘采用uv,但以前手动安装有全局Python的话,因全局Python不仅占用C盘空间,还极易在命令行中因为环境变量冲突(比如直接敲 python 时调用了旧环境,而非 uv 管理的环境)引发混淆,建议将其卸载。步骤如下:

步骤一:通过 Windows 标准流程卸载

  1. 按下快捷键 Win + i 打开系统 设置 -> 点击 应用 -> 安装的应用(或“应用和功能”)。
  2. 在搜索框中输入 Python
  3. 找到 Python 3.xx.y (64-bit),点击右侧的 ... 选择 卸载
  4. 如果列表中还有 Python Launcher (py),也可以一并卸载(uv 本身已经具备出色的版本调度能力)。

步骤二:清理残留的残留目录与缓存

官方卸载程序通常只删除标准文件,会留下你自己之前用全局 pip 安装的第三方库。

  1. 打开文件资源管理器,粘贴并前往以下路径(如果提示找不到,说明已被自动清理,忽略即可):%localappdata%\Programs\Python
  2. 查看里面是否还有 Python311 文件夹。如果有,直接右键彻底删除
  3. 清理 pip 全局缓存(可选): 前往 %localappdata%\pip,直接删掉 pip 文件夹,腾出空间。

步骤三:检查并清理环境变量( PATH )

卸载程序一般会自动清理环境变量,但手动确认一下更保险,防止命令行里残留废弃路径:

  1. Win + R 键,输入 sysdm.cpl 回车,打开“系统属性”。
  2. 切换到 高级 选项卡 -> 点击右下角的 环境变量
  3. “现登录用户 的用户变量”“系统变量” 两栏中,分别双击 Path
  4. 检查列表中是否有指向 ...\AppData\Local\Programs\Python\Python3xx... 的条目(例如包含 Python3xxPython3xx\Scripts 的行)。
  5. 如果有,选中它并点击右侧的 删除 -> 点击 确定 保存。

安装全局版uv

全局版uv的好处

统一入口:安装全局版后,你在任何目录下打开终端(CMD / PowerShell / VS Code 终端),都可以直接输入 uv 命令行来一键安装 Python 版本、创建虚拟环境或运行脚本。

不再重复造轮子:有了全局版 uv,你就不需要手动去下载 Python 安装包,也不需要安装臃肿的 Anaconda/Miniconda。它一个人就把 Python版本管理 和 项目环境管理 统统搞定了。

不会污染系统uv 本身只是一个极轻量的单文件工具(只有几十 MB),它在帮你在各个项目创建隔离环境时,不会像传统的 pip 那样把包乱堆在系统全局路径里。

全局版uv的安装目录

uv程序本身的默认安装路径

通过官方PowerShell脚本方式安装时的默认安装目录:%USERPROFILE%\.local\bin

通过winget方式安装时的默认安装目录:%localappdata%\Programs\uv

两种安装方式后面详述,一般情况下默认目录就好。

uv下载的Python版本和缓存目录

默认情况下,uv会把下载好的各类Python版本和安装包缓存放在:

  • Python版本:%localappdata%\uv\python
  • 依赖包缓存:%localappdata%\uv\cache

如果你C盘空间非常充裕:保持默认即可,完全不需要动。

如果你想为C盘省空间,想把 Python 和缓存挪到D盘或其他盘: 可以通过设置 Windows 环境变量,把 uv 的工作目录重定向到存储空间大的盘(比如 D:\uv_store);或用PowerShell脚本一次性配置全局环境变量。我实际使用的PowerShell脚本如下:

# 将 Python 安装路径指向 D 盘
[Environment]::SetEnvironmentVariable("UV_PYTHON_INSTALL_DIR", "D:\uv_store\python", "User")

# 将缓存路径指向 D 盘
[Environment]::SetEnvironmentVariable("UV_CACHE_DIR", "D:\uv_store\cache", "User")

全局版uv的两种常用安装方式

在 Windows 上安装全局 uv 时,官方 Install 脚本winget 包管理器 都是极其常用且官方支持的方式。

两者的本质区别在于:脚本方式更加轻量、原生且更新最快;而 winget 方式更适合习惯用系统级包管理器统筹全电脑软件的用户

方案一:官方 PowerShell 安装脚本(在cmd命令提示符内执行)

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
优点:
  1. 更新最及时(零延迟):直接从 Astral 官方服务器拉取最新的发布版本。uv 迭代非常频繁,用脚本永远能第一时间拿到最新功能和 bug 修复。
  2. 自我更新更方便:后续你想升级 uv 时,只需在终端敲一行 uv self update 即可完成瞬间自我无缝升级,无需依赖任何外部包管理器。
  3. 环境更加独立纯粹:直接将单文件可执行程序放到用户目录(通常是 ~/.local/bin)并自动配置 PATH,不依赖 Windows Apps 的系统映射。
缺点:
  1. 需要运行远程脚本:对部分极度看重安全策略的系统,运行 irm ... | iex 这类直接执行网络脚本的操作可能会触发某些杀毒软件的提示(虽然来自官方)。
  2. 不在 Windows 统一软件列表中:它不会出现在 Windows 的“设置 -> 应用 -> 安装的应用”列表中(如果以后不用了,卸载时需要手动去删 .local/bin 里的可执行文件,或者用官方提供的卸载思路)。

方案二:通过 winget 安装

winget install --id astral-sh.uv
优点:
  1. 系统集成度高:被 Windows 官方的 winget 追踪管理,以后可以通过 winget upgrade --all 一键升级你电脑里的所有软件(包括 uv)。
  2. 卸载非常简单干净:如果哪天不想用了,直接运行 winget uninstall astral-sh.uv 或者在 Windows 的“设置 -> 应用”里直接点击卸载即可。
  3. 安全透明:下载源经过微软 winget-pkgs 仓库的审核与哈希校验,对企业或严苛安全环境更友好。
缺点:
  1. 版本更新微有延迟:虽然 Astral 自动化流程很快,但 winget 仓库的 Manifest 同步有时会比官方直接 Release 慢几个小时到一天。
  2. 升级命令稍显繁琐:想单独升级它时,需要敲 winget upgrade --id astral-sh.uv,而不能直接用内置的 uv self update(某些情况下 winget 安装的版本使用 uv self update 会提示权限或路径由包管理器控制)。

对比总结

维度官方 PowerShell 脚本Windows winget
更新速度最快(第一时间获取)稍有延迟(依赖仓库同步)
日常升级方式uv self update(极简)winget upgrade astral-sh.uv
卸载方便度手动删除可执行文件系统面板一键卸载 或 winget uninstall
系统侵入度低(单文件放入 .local/bin

最终建议

  • 首选“官方 PowerShell 脚本”:如果你是 Python 开发者,追求最丝滑的体验和极速的自我升级(uv self update),推荐使用官方脚本。这也是 uv 官方文档中最推荐的方式。
  • 首选“winget:如果你有“软件强迫症”,希望电脑里所有的命令行工具(如 gitcmakeuv)都能通过 winget 统一管理和面板卸载,选 winget 更加省心。

我的uv安装和确认的记录

我选的是”官方 PowerShell 脚本“方式

安装结果如下所示,PATH环境变量也被自动加好了(新开cmd命令提示符页面后生效)。

uv安装结果

uv python list命令查看可下载的python版本

安装好uv后,在新cmd命令提示符界面中,用uv python list命令可查看可下载的python环境,我的执行结果如下:

uv python list
cpython-3.15.0b3-windows-x86_64-none                 <download available>
cpython-3.15.0b3+freethreaded-windows-x86_64-none    <download available>
cpython-3.14.6-windows-x86_64-none                   <download available>
cpython-3.14.6+freethreaded-windows-x86_64-none      <download available>
cpython-3.13.14-windows-x86_64-none                  <download available>
cpython-3.13.14+freethreaded-windows-x86_64-none     <download available>
cpython-3.12.13-windows-x86_64-none                  <download available>
cpython-3.11.15-windows-x86_64-none                  <download available>
cpython-3.10.20-windows-x86_64-none                  <download available>
cpython-3.9.25-windows-x86_64-none                   <download available>
cpython-3.8.20-windows-x86_64-none                   <download available>
pypy-3.11.15-windows-x86_64-none                     <download available>
pypy-3.10.16-windows-x86_64-none                     <download available>
pypy-3.9.19-windows-x86_64-none                      <download available>
pypy-3.8.16-windows-x86_64-none                      <download available>
graalpy-3.12.0-windows-x86_64-none                   <download available>
graalpy-3.11.0-windows-x86_64-none                   <download available>
graalpy-3.10.0-windows-x86_64-none                   <download available>

uv python list输出结果中的各行含义拆解

每一行的命名格式为:[解释器类型]-[版本号][+特殊变体]-[操作系统]-[架构]-[其他细节]

1. 解释器类型(开头的名称)
  • cpython:官方标准的 Python 实现,99% 的 Python 开发者和第三方库(Pandas、PyTorch、Django 等)都是基于它运行的。
  • pypy:采用 JIT(即时编译)技术的替代实现,在某些纯计算任务中速度更快,但对部分 C 扩展库兼容性较差。
  • graalpy:Oracle 研发的基于 GraalVM 的 Python 实现,主要用于 Java 与 Python 的混合嵌入开发。
2. 标识含义(后缀与变体)
  • b3 (如 3.15.0b3):代表 Beta(测试版),非正式生产版本,仅供测试新特性使用。
  • +freethreaded:代表无 GIL(全局解释器锁)的自由线程版本。这是 Python 近期引入的实验性特性,旨在提高多核并行性能,但目前大量第三方库尚不支持。
  • windows-x86_64-none:代表适用于 Windows 64位操作系统 的二进制文件。
  • <download available>:说明该版本目前在你的电脑里尚未下载,但 uv 随时可以从云端拉取并使用。

用uv一键安装python 3.14(最新稳定版)

你不需要手动敲长长的完整文件名,uv 的语义化别名会自动识别最新稳定版:

  • 安装推荐的最新稳定版 (Python 3.14)uv python install 3.14 (uv 会自动跳过 +freethreaded 和测试版,精准下载最新的正式稳定版 cpython-3.14.6)
  • 项目中使用: 后续在任何项目目录中创建虚拟环境时,直接指定版本号即可:uv venv --python 3.14

我的python 3.14的安装结果:

uv python install 3.14
Installed Python 3.14.6 in 3.70s
 + cpython-3.14.6-windows-x86_64-none (python3.14.exe)

仔细观察上面的截图,你会发现这两个文件夹的图标有一个非常关键的小区别:

cpython-3.14-windows-x86_64-none 的文件夹图标左下角带有一个小箭头,这说明它其实不是一个真正的文件夹,而是一个符号链接(Symbolic Link,即快捷方式)

下面是这两个目录各自的角色和原理:

1. 实际存放内容的实体文件夹:cpython-3.14.6-...
  • 作用:这里存放的是 Python 3.14.6 完整的二进制文件、标准库以及可执行程序(python.exe)。
  • 特点:带有完整的小版本号(.6),是真实的磁盘占用实体。
2. 快捷指向的软链接:cpython-3.14-...
  • 作用:它是一个指向 cpython-3.14.6-... 的软链接,几乎不占用磁盘空间
  • 为什么要这么做? 这是 uv 为了版本兼容与快捷调用设计的机制: 当你运行命令 uv venv --python 3.14 时,你并没有指定末尾的小版本号 .6uv 只需要直接寻找 cpython-3.14-... 这个通用链接,就能自动定位到你目前已安装的最新的 3.14.6 版本。
💡 总结与建议
  • 无需担心空间:虽然看起来有两个目录,但实际上 Python 只有一份,软链接只是一个轻量级的“导航路标”。
  • 千万不要手动删除 cpython-3.14-...:如果删掉了这个快捷链接,后续使用 uv venv --python 3.14 等快捷命令时可能会提示找不到对应的解释器。保持默认即可,uv 会自动为你维护这些链接。

在VSCode中关联使用uv创建的虚拟环境(上面安装好的Python 3.14.6)

VSCode 对 Python 虚拟环境有非常完善的自动识别机制,具体操作步骤如下:

步骤一:在项目中用 uv 创建虚拟环境

首先在你的项目根目录下打开终端,运行 uv venv

# 进入你的项目目录
cd /d D:\Src\Python

# 使用 uv 创建虚拟环境(默认会在当前目录下生成一个 .venv 文件夹)
uv venv

# (可选)如果你有通过uv安装好多个Python版本,想指定特定的Python版本,比如3.14时:
# uv venv --python 3.14

执行完成后,你的项目根目录下会多出一个名为 .venv 的文件夹。

步骤二:在 VSCode 中选择该虚拟环境

  1. 在 VSCode 中打开项目文件夹(文件 -> 打开文件夹 -> 选择 D:\Src\Python)。
  2. 打开命令面板
    • Windows环境的快捷键:Ctrl + Shift + P
  3. 输入并选择Python: Select Interpreter(Python: 选择解释器)。
  4. 选择对应的解释器
    • 在弹出的列表中,VSCode 通常会自动扫描并优先推荐带 '.venv’: venv` 标记的解释器,直接点击选中即可。若有多个适是而非的选项,请选择带”workspace”字样的。
    • 如果列表中没出来:点击列表最上方的 Enter interpreter path...(输入解释器路径) -> Find...(查找),然后手动定位到你项目里的 .venv 目录,选择 .venv\Scripts\python.exe

步骤三:验证是否关联成功

  1. 查看右下角:打开任意一个 .py 文件,查看 VSCode 右下角状态栏,应该会显示类似 3.14.x ('.venv': venv) 的字样。
  2. 打开集成终端:在 VSCode 内新建终端(快捷键 Ctrl + ~),你会发现命令行最前面自动加上了 (.venv) 前缀,说明环境已自动激活。

💡 进阶小技巧

如果你使用 uv 管理项目依赖,在 VSCode 内可以直接使用 uv 替代传统的 pip 命令:

  • 安装新依赖:在 VSCode 终端中直接运行:uv add requests (这会自动把依赖下载到 .venv 中,并同步更新 pyproject.toml 文件)
  • 快捷配置文件(可选): 如果你希望 VSCode 永远优先扫描项目根目录下的 .venv,可以确保项目根目录下的 .vscode/settings.json 中包含以下设置:JSON{ "python.defaultInterpreterPath": "${workspaceFolder}/.venv/Scripts/python.exe" }

评论

标题和URL已复制