介绍
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\pythonuv 下载的所有包缓存的默认路径:
C:\Users\你的名字\.cache\uvuv 安装的工具(ruff、black、jupyter)默认路径:
C:\Users\你的名字\.uv\tools
方式一:独立安装(推荐,无需 Python 环境)
启动 PowerShell(执行PowerShell脚本),执行下面命令:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
powershell
意思:启动 Windows 的 PowerShell 命令行工具-ExecutionPolicy ByPass
意思:临时允许运行远程脚本,不拦截安全提示
Windows 默认不让随便运行网上下载的脚本,这句就是临时放行,只对这一条命令有效,非常安全。-c "..."
意思:执行引号里的内容irm https://astral.sh/uv/install.ps1irm=Invoke-RestMethod- 意思:去这个网址下载 uv 的安装脚本
- 相当于:打开网页 → 复制安装代码
| 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 件事:
- 安装 requests
- 自动把包名写到 pyproject.toml
- 生成 / 更新版本锁文件(保证别人装的版本和你一样)
适合:开发项目、正式工程、要保存依赖的场景
添加生产依赖
添加最新版的依赖
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 兼容命令进行包管理
作用:只安装,不保存
运行后:
- 只安装包
- 不会写入 pyproject.toml
- 下次别人克隆项目,不会自动装这些包
应用场景
临时测试、临时用一下、不想保存依赖。如:临时安装 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,功能稳定,适合生产环境使用。





