uv:Python 包管理的终极答案?Astral 用 Rust 重塑了整条工具链
如果 pip 是手动挡,那 uv 就是自动挡——而且百公里加速只要 2 秒。
前言
2026 年 5 月,Python 社区最炙手可热的工具,不是某个 AI 框架,而是一个用 Rust 写的包管理器。
uv,全称 Universal Virtualizer(或者你叫它 uv 也完全没问题),出自 Astral 团队之手——对,就是那个做了 Ruff 的团队。如今 uv 的 GitHub 星标已突破 10 万,最新版本 0.11.8,以"每月一两个大版本"的速度狂飙,成为 Python 历史上普及最快的工具之一。
但它的意义不只是"快"。uv 真正做的事,是把 Python 开发者日常要用的六七个工具合成一个。
pip 太慢、venv 太烦、poetry 太重、conda 太慢——uv 说:我全包了
旧世界的问题
Python 的包管理工具链,长期处于"七国八制"的状态:
pip管包安装,但慢,还不支持锁文件virtualenv/venv管环境,但切换版本要另外装pyenvpoetry管项目,但性能和依赖解析一直是痛点conda倒是全包了,但慢、臃肿、和非 conda 包混用时问题一堆pip-tools配锁文件,但要手动维护两套文件
结果是:每个 Python 项目都是"我电脑上能跑,到你那就不行"的地狱。
uv 的破局思路
Astral 团队用 Rust 重写了整条工具链,只做一件事:把上面这些全部替代掉。
uv 能做的事:
uv python list # 查看可用的 Python 版本
uv python install # 安装任意 Python 版本
uv python pin # 固定项目使用的 Python 版本
uv venv # 创建虚拟环境
uv pip install # 安装包(兼容 pip 语法)
uv pip freeze # 导出依赖
uv pip tree # 查看依赖树
uv init # 创建新项目
uv add # 添加依赖
uv sync # 同步依赖到环境
uv lock # 生成锁文件
uv build # 构建分发包
uv publish # 发布到 PyPI
uv run # 直接运行脚本(自动创建临时环境)
uvx # 运行工具(不安装,长期有效)
uv self update # 自更新
六个工具的功能,一个可执行文件搞定。
速度:10-100 倍的碾压
uv 最被津津乐道的,是它的速度。
官方 benchmark 显示,uv 的依赖解析和安装速度比 pip 快 10-100 倍。在大型项目(上百个依赖)中,pip 可能需要几分钟,uv 几十秒搞定。
背后原因是 Rust 的并发模型加上 uv 自己的全局缓存机制:
- 并发下载:所有包同时下载,不排队
- 智能缓存:同一个包的不同版本复用缓存
- 全局共享缓存:
~/.cache/uv目录下,所有项目共享一份缓存 - 并行解析:依赖解析用 Rust 的 tokio 异步并发处理
实测感受(from 社区):
# pip 安装 torch(冷缓存)
$ time pip install torch
# → 2分30秒
# uv 安装 torch(冷缓存)
$ time uv pip install torch
# → 12秒
这不是 10%,是数量级的差距。对于 CI/CD 环境,这个速度提升直接意味着更短的构建时间。
安装:3 秒钟上手
macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
或者用 pip / brew
pip install uv
# 或
brew install uv
安装完成后,确认版本:
$ uv --version
uv 0.11.8 (revision: xxxxxx)
自更新:
uv self update
核心用法:从入门到精通
1. 管理 Python 版本
uv 自带 Python 版本管理,不需要 pyenv:
# 查看所有可用版本
uv python list
# 安装指定版本
uv python install 3.13
# 固定项目使用的版本(生成 .python-version 文件)
uv python pin 3.13
# 卸载版本
uv python uninstall 3.12
固定版本后,uv run 或 uv sync 会自动使用指定版本。如果版本不存在,uv 会自动下载,不需要手动处理。
2. 创建虚拟环境
# 在当前目录创建 .venv
uv venv
# 指定 Python 版本
uv venv -p 3.13
# 激活(和普通 venv 一样)
source .venv/bin/activate # Linux/macOS
# 或
.venv\Scripts\activate # Windows
3. 管理依赖
# 添加依赖
uv add requests
uv add "requests>=2.28"
# 批量添加
uv add httpx rich pandas
# 开发依赖
uv add --dev pytest pytest-cov
# 移除依赖
uv remove requests
# 同步(按 pyproject.toml 安装所有依赖)
uv sync
# 创建/更新锁文件
uv lock
# 导出为 requirements.txt(兼容老工具)
uv export --format requirements.txt -o requirements.txt
4. 直接运行脚本(最酷的功能)
不需要创建项目,不需要安装依赖,直接跑:
# 运行带依赖的脚本
uv run --with rich example.py
# 指定 Python 版本
uv run --python 3.12 example.py
# 带参数运行
uv run example.py --input data.csv
uv 会在临时环境中自动解析、安装依赖并运行,脚本结束后清理。这是目前最快的"试运行一个脚本"的方式。
更优雅的做法是用内联脚本元数据(PEP 723 风格):
#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.12"
# dependencies = ["httpx", "rich"]
# ///
import httpx
from rich.console import Console
console = Console()
response = httpx.get("https://api.github.com")
console.print(response.json())
给脚本加个 shebang,直接 ./example.py 就能跑——uv 自动处理版本和依赖。
5. 运行工具(uvx)
uvx 类似于 npx,用来临时运行工具,不污染全局环境:
# 临时运行 black
uvx black .
# 临时运行 ruff
uvx ruff check .
# 临时运行 ipython
uvx ipython
# 指定版本
uvx --from httpie http GET https://api.github.com
常用工具的替代:
| 传统方式 | uvx 方式 |
|---|---|
pip install black && black . | uvx black . |
pip install httpie && http GET example.com | uvx httpie GET example.com |
pip install jupyterlab | uvx jupyterlab |
全程零污染——工具只在这次运行期间临时安装,永久环境干干净净。
6. 项目管理(uv init)
# 创建新项目
uv init myproject
cd myproject
# 自动生成:pyproject.toml, README.md, .gitignore
pyproject.toml 结构:
[project]
name = "myproject"
version = "0.1.0"
description = "My awesome project"
readme = "README.md"
requires-python = ">=3.13"
dependencies = ["requests", "rich"]
[project.optional-dependencies]
dev = ["pytest", "ruff"]
然后:
uv add httpx # 添加依赖
uv sync # 同步到环境
uv run python -m myproject # 运行
uv build # 构建分发包
uv publish # 发布到 PyPI
企业级特性:多用户共享
uv 在团队协作方面也有深度的设计。
共享 Python 安装
团队共用一台开发机时,可以让所有用户共享同一份 Python 安装:
# 管理员:创建全局目录
sudo mkdir -p /opt/uv/python
sudo chmod 777 /opt/uv/python
# 写入环境变量(Linux)
echo 'UV_PYTHON_INSTALL_DIR="/opt/uv/python"' | sudo tee -a /etc/environment
每个用户运行 uv python install 时,Python 会被安装到共享目录,不会重复下载。uv 有智能发现机制,会自动优先使用这个目录里的版本。
CI/CD 加速
在 CI 环境里,利用 uv 的缓存:
# .github/workflows/ci.yml 示例
- name: Install uv
run: curl -LsSf https://astral.sh/uv/install.sh | sh
- name: Install dependencies
run: uv sync --frozen
- name: Run tests
run: uv run pytest
--frozen 标志:锁定版本,不更新锁文件,保证 CI 环境和开发环境完全一致。
uv.lock:终于有真正的锁文件了
Python 包管理的千年难题——依赖不一致——终于有了解法。
uv 在首次运行时会自动生成 uv.lock 文件,记录每个包的精确版本和来源(URL、hash)。这个锁文件:
- 确定性安装:任何机器、任何时间,
uv sync安装出来的依赖树完全一致 - 跨平台兼容:同一份锁文件,Linux 和 macOS 都能用
- 可审计:所有包的来源和 hash 都在锁文件里,安全可追溯
对比 poetry 的 poetry.lock,uv.lock 的优势在于速度(生成和解析都快)和跨工具兼容(导出了 requirements.txt)。
Shell 补全:不再迷路
# bash
echo 'eval "$(uv generate-shell-completion bash)"' >> ~/.bashrc
# zsh
echo 'eval "$(uv generate-shell-completion zsh)""' >> ~/.zshrc
# fish
echo 'uv generate-shell-completion fish | source' > ~/.config/fish/completions/uv.fish
补全支持所有子命令和参数,命令行操作效率大幅提升。
2026 年 5 月:为什么现在关注 uv
今年 5 月,uv 出现了明显的爆发信号:
- 教程井喷:腾讯云、CSDN、博客园等平台密集发布 uv 教程(5 月 3 日、8 日、11 日连续多篇)
- 企业采用:AI 开发团队开始用 uv 管理 PyTorch 环境("uv + torch" 已经成为 GPU 环境配置的标准组合)
- 内网场景:有大量内网环境下使用 uv 的实践文章(说明生产环境已经在用)
- 版本狂飙:从 0.7.x 到 0.11.x 不到一年,功能快速成熟
- GitHub 趋势:astral-sh/uv 长期占据 Rust 语言热门项目榜前五
这不是一个"有潜力"的项目,这是一个已经被大量采用的生产工具。
结语
uv 不是一个增量改进,它是一个范式转移。
它把 Python 开发者从"选工具"的泥潭里拉出来,用一个工具覆盖了包管理、版本管理、虚拟环境、项目管理、脚本运行、工具运行——全部,而且速度是原来的 10-100 倍。
对于 Python 生态来说,这是一个历史性的时刻。对于还没开始用 uv 的开发者来说,现在就是最好的入局时机。
下一步:
curl -LsSf https://astral.sh/uv/install.sh | sh
uv python install 3.13
uv init myproject && cd myproject
uv add httpx rich
uv run python -c "from rich import print; print('[bold green]Hello, uv![/bold green]')"
体验一下,你就知道为什么所有人都在说"回不去了"。
工具改变生产方式,生产方式改变世界。
uv,可能是 2026 年 Python 圈最重要的变化。