编程 uv:Python 包管理的终极答案?Astral 用 Rust 重塑了整条工具链

2026-05-11 08:52:43 +0800 CST views 6

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 管环境,但切换版本要另外装 pyenv
  • poetry 管项目,但性能和依赖解析一直是痛点
  • 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.comuvx httpie GET example.com
pip install jupyterlabuvx 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 出现了明显的爆发信号:

  1. 教程井喷:腾讯云、CSDN、博客园等平台密集发布 uv 教程(5 月 3 日、8 日、11 日连续多篇)
  2. 企业采用:AI 开发团队开始用 uv 管理 PyTorch 环境("uv + torch" 已经成为 GPU 环境配置的标准组合)
  3. 内网场景:有大量内网环境下使用 uv 的实践文章(说明生产环境已经在用)
  4. 版本狂飙:从 0.7.x 到 0.11.x 不到一年,功能快速成熟
  5. 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 圈最重要的变化。

复制全文 生成海报 Python 包管理 uv Rust 工具链

推荐文章

Go 中的单例模式
2024-11-17 21:23:29 +0800 CST
PHP如何进行MySQL数据备份?
2024-11-18 20:40:25 +0800 CST
Linux 网站访问日志分析脚本
2024-11-18 19:58:45 +0800 CST
Nginx 防止IP伪造,绕过IP限制
2025-01-15 09:44:42 +0800 CST
使用 Git 制作升级包
2024-11-19 02:19:48 +0800 CST
MySQL 日志详解
2024-11-19 02:17:30 +0800 CST
Roop是一款免费开源的AI换脸工具
2024-11-19 08:31:01 +0800 CST
Go 单元测试
2024-11-18 19:21:56 +0800 CST
快手小程序商城系统
2024-11-25 13:39:46 +0800 CST
FcDesigner:低代码表单设计平台
2024-11-19 03:50:18 +0800 CST
thinkphp分页扩展
2024-11-18 10:18:09 +0800 CST
JavaScript 异步编程入门
2024-11-19 07:07:43 +0800 CST
程序员茄子在线接单