uv python版本管理、虚拟环境管理、包管理器

介绍

uv 是由 Astral 公司(Ruff 工具作者)开发、Rust 编写的极速 Python 包与项目管理器,可一站式替代 pip、venv、pyenv、pipx 等工具,核心优势是比 pip 快 10–100 倍、依赖解析强、一体化环境管理。

什么是 uv?

  • 极速包安装器:替代 pip,解析与安装速度提升一个数量级(冷启动快 8–10 倍,缓存后快 80–115 倍)。
  • 虚拟环境管理器:替代 venv/virtualenv,自动创建与管理 .venv。
  • Python 版本管理器:替代 pyenv,一键安装/切换多版本 Python。
  • 项目管理器:类似 Poetry/PDM,支持 pyproject.toml + uv.lock 标准化依赖管理。
  • 工具运行器:替代 pipx,隔离环境安装并执行 CLI 工具(uvx)。

优势

  • 🚀 速度碾压:Rust 底层 + 并行下载 + PubGrub 解析算法,大型项目安装从分钟级降至秒级。
  • 📦 一体化工具:一个命令行搞定环境、依赖、版本、脚本运行,无需多工具切换。
  • 🔒 可复现性强:跨平台 uv.lock 文件,保证开发/测试/生产环境完全一致。
  • 🧩 兼容现有生态:无缝支持 requirements.txt、pyproject.toml、setup.py,迁移零成本。
  • 💾 智能缓存:三级缓存(元数据/下载/构建),重复安装几乎瞬时完成。

为什么选择 uv?

uv 的核心优势在于其革命性的速度和强大的功能集成。

  • 极致的速度:得益于 Rust 的并行处理能力和高效的依赖解析算法,uv 在安装包、解析依赖和创建虚拟环境等操作上比传统工具快 10 到 100 倍。
  • 统一的工作流:它将多个工具的功能整合于一身,让你无需在 pip、venv、pip-tools、pipx、pyenv 等多个工具间切换,大大简化了开发环境。
  • 开箱即用:uv 是一个独立的二进制文件,无需 Python 环境即可安装和运行,避免了“先有鸡还是先有蛋”的安装难题。它遵循“约定优于配置”的原则,默认行为就能满足大部分需求。

为什么这么快?

1. Rust 语言底层

  • 无 GC 开销、内存占用低、执行效率接近 C++。

2. PubGrub 依赖解析算法

  • 替代 pip 传统回溯算法,时间复杂度从指数级降至 O(n²),冲突定位更精准。

3. 并行下载与解压

  • 同时下载多个包、并行解压,最大化利用网络与 CPU。

4. 三级缓存架构

  • 元数据缓存:缓存包索引信息,避免重复请求 PyPI。
  • 下载缓存:缓存 .whl/.tar.gz 包,重复安装直接复用。
  • 构建缓存:缓存编译后的扩展包(如 numpy),避免重复编译。

与主流工具对比

1. uv vs pip + venv

特性 uv pip + venv
速度 快 10–100 倍 慢,大型项目分钟级
环境管理 一体化,自动创建 需手动创建/激活
锁文件 原生支持 uv.lock 需 pip freeze,无统一标准
依赖解析 PubGrub,冲突清晰 回溯算法,冲突信息模糊

2. uv vs Poetry

  • 速度:uv 比 Poetry 快 5–10 倍(Poetry 解析慢)。
  • 兼容性:uv 无缝支持 requirements.txt,Poetry 强绑定 pyproject.toml。
  • 功能:Poetry 内置打包/发布,uv 目前专注环境与依赖管理(后续会支持)。

3. uv vs Conda

  • 定位:uv 专注纯 Python 包;Conda 管理跨语言依赖(如 C 库、CUDA)。
  • 速度:uv 解析/安装远快于 Conda(Conda 用 SAT 求解器,复杂度高)。
  • 适用场景:uv 适合 Web/后端/数据分析(纯 Python);Conda 适合科学计算/机器学习(需系统库)。

快速安装-windows系统

  • uv安装到默认路径 C:\Users\你的用户名\.uv\

  • 安装python的默认路径:C:\Users\你的名字\.uv\python

  • uv 下载的所有包缓存的默认路径:C:\Users\你的名字\.cache\uv

  • uv 安装的工具(ruff、black、jupyter)默认路径:C:\Users\你的名字\.uv\tools

方式一:独立安装(推荐,无需 Python 环境)

启动 PowerShell(执行PowerShell脚本),执行下面命令:

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
  1. powershell
    意思:启动 Windows 的 PowerShell 命令行工具

  2. -ExecutionPolicy ByPass
    意思:临时允许运行远程脚本,不拦截安全提示
    Windows 默认不让随便运行网上下载的脚本,这句就是临时放行,只对这一条命令有效,非常安全。

  3. -c "..."
    意思:执行引号里的内容

  4. irm https://astral.sh/uv/install.ps1

    • irm = Invoke-RestMethod
    • 意思:去这个网址下载 uv 的安装脚本
    • 相当于:打开网页 → 复制安装代码
  5. | iex

    • | = 管道,把前面的结果传给后面
    • iex = Invoke-Expression
    • 意思:立即执行刚才下载的安装脚本

整句话连起来的意思
让 PowerShell 临时放行安全限制 → 下载 uv 安装脚本 → 直接运行安装

就是一键自动安装 uv,不需要你手动下载、点下一步、配置环境变量,全部自动完成。

方式二:通过 pip 安装(已有 Python)

pip install uv
# 或 pipx(隔离环境)
pipx install uv

验证安装是否成功

另启动shell窗口,执行下面命令:

uv --version

输出版本号,如下图,表示成功:

快速安装-macOS/Linux 系统

curl -LsSf https://astral.sh/uv/install.sh | sh

高级安装-windows

安装到指定路径

如:安装到 D:\devtools\uv 路径,启动 PowerShell,执行下面命令:

powershell -ExecutionPolicy ByPass -c {$env:UV_INSTALL_DIR = "D:\devtools\uv";irm https://astral.sh/uv/install.ps1 | iex}

修改默认路径

安装后,在系统环境变量(用户变量)里加 3 个变量:

变量名 示例值
UV_PYTHON_INSTALL_DIR D:\devtools\uv_python
UV_CACHE_DIR D:\devtools\uv_cache
UV_TOOL_DIR D:\devtools\uv_tools

解释:

  • UV_PYTHON_INSTALL_DIR:uv 下载安装的 Python 保存路径

  • UV_CACHE_DIR:uv 下载的所有包缓存路径

  • UV_TOOL_DIR:uv 安装的工具(ruff、black、jupyter)的路径

查看配置路径是否成功

另开启一个 shell,执行下面命令,看输出的路径是不是上面环境变量的:

uv python dir
uv cache dir
uv tool dir

更新uv

一键更新 uv

uv self update

指定国内源

安装python、库时,默认从国外服务器下载,有时速度很慢,甚至网络不稳定导致下载一半中断,要改为国内源

永久设置国内源(推荐)

配置后,安装python、库时,永久使用国内源

在文件夹地址栏输入下面路径:

%APPDATA%

敲回车,编程下面路径:

C:\Users\mym\AppData\Roaming

查看该目录下是否有下面文件夹,没有就创建:

uv

在 %APPDATA%\uv 目录下,创建 uv.toml 文件,内容如下:

# 配置 Python 解释器下载源
python-install-mirror = "https://registry.npmmirror.com/-/binary/python-build-standalone/"

# 配置 PyPI 包下载源 (例如:阿里云)
[[index]]
url = "https://mirrors.aliyun.com/pypi/simple/"
default = true

国内常用源列表

阿里:https://mirrors.aliyun.com/pypi/simple/
华为:https://mirrors.huaweicloud.com/pypi/simple/
腾讯云:https://mirrors.cloud.tencent.com/pypi/simple/

临时用一次国内源(单次有效)

uv install --index-url https://pypi.tuna.tsinghua.edu.cn/simple/
uv add requests --index-url https://pypi.tuna.tsinghua.edu.cn/simple/

查看是否设置成功

打开一个新的终端窗口(确保加载了最新配置)。
运行以下命令(以安装 numpy 为例):

pip install numpy --verbose

注意:加上 --verbose 可以看到更详细的调试信息。

观察输出内容:
✅ 生效了: 你会看到类似 Using index url: https://mirrors.aliyun.com/pypi/simple/ 的提示,或者下载链接显示的是 mirrors.aliyun.com

❌ 没生效: 如果显示 pypi.org 或者下载速度极慢,说明配置未命中。

Python 版本管理

列出可下载、已安装版本

uv python list

安装指定 Python 版本

注意:配置上面的环境变量后,要重新开一个shell窗口,否则不生效

自动解压到缓存目录

安装 3.11.9

uv python install 3.11.15

安装 3.10.x

uv python install 3.10

切换项目 Python 版本

写入 .python-version

uv python pin 3.11.9

常用命令

1. 初始化项目

初始化项目(生成 pyproject.toml + .python-version)

uv init my_project

自动创建 my_project 目录,如下图:

2. 创建虚拟环境

cd my_project

手动创建虚拟环境(默认 .venv)

uv venv .venv

在 my_project 目录下自动创建 .venv 目录,如下图:

3. 激活环境

Windows
.venv\Scripts\activate
macOS/Linux
source .venv/bin/activate
查看python版本
python

4. 退出环境

deactivate

查看已安装的依赖

uv pip list

添加依赖

作用:安装 + 写入依赖文件(正式用法)
运行后会自动做 3 件事:

  1. 安装 requests
  2. 自动把包名写到 pyproject.toml
  3. 生成 / 更新版本锁文件(保证别人装的版本和你一样)

适合:开发项目、正式工程、要保存依赖的场景

添加生产依赖

添加最新版的依赖
uv add requests
指定版本
uv add requests==2.31.0
安装「不低于某个版本」
uv add "requests>=2.30.0"
安装「不高于某个版本」
uv add "requests<=2.30.0"

添加开发依赖

如测试工具

uv add --dev pytest

同步环境

安装 pyproject.toml 里的所有依赖

uv sync

锁定依赖(生成/更新 uv.lock,提交到版本库)

uv lock

移除依赖

uv remove requests tqdm

运行脚本

uv run app.py

传递参数

uv run app.py --epochs 50 --batch-size 32

直接用指定版本运行脚本

uv run --python 3.11.9 app.py

uv pip 兼容命令进行包管理

作用:只安装,不保存
运行后:

  1. 只安装包
  2. 不会写入 pyproject.toml
  3. 下次别人克隆项目,不会自动装这些包

应用场景

临时测试、临时用一下、不想保存依赖。如:临时安装 requests 库,进行测试,用完后就删掉

例子

# 安装包(同 pip,底层极速解析)
uv pip install requests

卸载包

uv pip uninstall requests

清空所有包

注意:只是清空所有包,不会修改 pyproject.toml 文件中的依赖

uv pip uninstall --all

requirements.txt 相关命令

生成 requirements.txt

兼容旧项目

uv pip freeze > requirements.txt

从 requirements.txt 安装

uv pip install -r requirements.txt

工具运行(uvx,替代 pipx)

# 无需安装,直接运行 CLI 工具(隔离环境)
uvx ruff check .          # 运行 ruff 代码检查
uvx black main.py          # 运行 black 格式化

# 安装工具到隔离环境
uv tool install ruff
uv tool run ruff check .   # 或直接 ruff check .(加入 PATH)

高级用法

1. 锁文件严格模式(CI/CD 必备)

# 强制使用锁文件,不更新(CI 环境防意外升级)
uv sync --locked

# 仅更新锁文件,不安装
uv lock --upgrade  # 升级所有依赖
uv lock --upgrade-package requests  # 升级指定包

迁移(从 pip/Poetry 到 uv)

1. 从 pip + requirements.txt 迁移

# 1. 初始化项目
uv init

# 2. 导入 requirements.txt
uv add -r requirements.txt

# 3. 生成锁文件
uv lock

# 4. 后续用 uv sync 替代 pip install

2. 从 Poetry 迁移

# 1. 导出 Poetry 依赖
poetry export -f requirements.txt --output requirements.txt

# 2. 同上述步骤导入 uv

总结

uv 是 Python 包管理的革命性工具,以极速性能、一体化功能、无缝兼容性解决了传统工具的核心痛点。对于新项目,直接用 uv init 开始;对于旧项目,可逐步迁移(兼容 requirements.txt)。目前(2026 年 4 月)uv 已更新到 0.11.8,功能稳定,适合生产环境使用。


原文出处:/show_1GW3FqUl5rYM.html