用 Rust 编写的极速 Python 包管理器,一个工具替代 pip、pip-tools、pipx、poetry、pyenv、virtualenv 等
为什么选择 uv?
如果你还在用 pip + virtualenv + pyenv 的组合来管理 Python 环境,是时候考虑换一个更现代的工具了。uv 是 Astral 公司(也是 Ruff 的开发者)推出的 Python 包管理工具,用 Rust 编写,速度比传统工具快 10-100 倍。
核心优势:
- 极速:依赖解析和安装速度碾压传统工具
- 全能:一个工具搞定 Python 版本管理、虚拟环境、包管理、脚本运行
- 兼容:提供
uv pip接口,无缝迁移现有工作流 - 跨平台:生成的 lockfile 支持多平台
1. 安装 uv
macOS / Linux
Bash
1curl -LsSf https://astral.sh/uv/install.sh | shWindows (PowerShell)
PowerShell
1powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"其他方式
Bash
1# 使用 pip(不推荐作为主要安装方式)
2pip install uv
3
4# 使用 Homebrew
5brew install uv
6
7# 使用 Cargo
8cargo install --locked uv安装后,运行 uv 验证安装成功。后续升级只需:
Bash
1uv self update2. Python 版本管理
uv 内置了 Python 版本管理功能,可以替代 pyenv。
安装 Python
Bash
1# 安装指定版本
2uv python install 3.12
3
4# 安装多个版本
5uv python install 3.10 3.11 3.12
6
7# 安装 PyPy
8uv python install pypy@3.10查看已安装版本
Bash
1uv python list自动下载
uv 最方便的特性之一是自动下载 Python。如果系统没有需要的版本,uv 会自动下载安装:
Bash
1# 即使系统没有 Python 3.12,这个命令也能执行
2uv venv --python 3.123. 项目管理(推荐方式)
uv 的项目管理模式使用 pyproject.toml + uv.lock,是最推荐的工作流。
创建新项目
Bash
1# 创建应用项目
2uv init myproject
3cd myproject
4
5# 创建库项目(会配置构建系统)
6uv init --lib mylib生成的目录结构:
Plain Text
1myproject/
2├── .python-version # 项目使用的 Python 版本
3├── .venv/ # 虚拟环境(首次运行时创建)
4├── pyproject.toml # 项目配置和依赖
5├── uv.lock # 锁定文件
6├── main.py
7└── README.md添加依赖
Bash
1# 添加依赖
2uv add requests
3uv add "fastapi>=0.100"
4
5# 添加开发依赖
6uv add --dev pytest ruff
7
8# 从 requirements.txt 导入
9uv add -r requirements.txt移除依赖
Bash
1uv remove requests运行项目
Bash
1# 运行脚本(自动同步依赖)
2uv run main.py
3
4# 运行任意命令
5uv run python -c "import requests; print(requests.__version__)"
6
7# 运行 pytest
8uv run pytestuv run 会自动确保虚拟环境与 lockfile 同步,无需手动 pip install。
同步环境
Bash
1# 同步依赖到虚拟环境
2uv sync
3
4# 仅安装生产依赖
5uv sync --no-dev4. 脚本模式(单文件依赖)
对于单文件脚本,uv 支持 PEP 723 的内联脚本元数据,无需创建完整项目。
创建带依赖的脚本
Bash
1# 创建脚本并添加依赖
2echo 'import requests; print(requests.get("https://httpbin.org/ip").json())' > script.py
3uv add --script script.py requests这会在脚本顶部添加元数据注释:
Python
1# /// script
2# dependencies = [
3# "requests",
4# ]
5# ///
6
7import requests
8print(requests.get("https://httpbin.org/ip").json())运行脚本
Bash
1uv run script.pyuv 会自动创建临时虚拟环境并安装依赖,脚本完全自包含,方便分享。
5. 工具运行(替代 pipx)
uvx 命令可以在临时环境中运行 Python CLI 工具,无需全局安装。
临时运行工具
Bash
1# 运行 ruff
2uvx ruff check .
3
4# 运行 black
5uvx black --check .
6
7# 运行特定版本
8uvx ruff@0.4.0 check .
9
10# 当包名和命令名不同时
11uvx --from httpie http httpbin.org/ip全局安装工具
如果某个工具需要频繁使用,可以全局安装:
Bash
1# 安装工具
2uv tool install ruff
3
4# 查看已安装工具
5uv tool list
6
7# 升级工具
8uv tool upgrade ruff
9
10# 卸载
11uv tool uninstall ruff6. pip 兼容模式
如果你习惯 pip 的使用方式,或者需要迁移现有项目,可以使用 uv pip 接口。
创建虚拟环境
Bash
1uv venv
2
3# 指定 Python 版本
4uv venv --python 3.11
5
6# 指定目录
7uv venv .venv-dev安装包
Bash
1# 激活环境后
2source .venv/bin/activate # Linux/macOS
3# 或 .venv\Scripts\activate # Windows
4
5# 安装包
6uv pip install requests flask
7
8# 从 requirements.txt 安装
9uv pip install -r requirements.txt
10
11# 可编辑安装
12uv pip install -e .生成锁定文件
Bash
1# 从 requirements.in 生成 requirements.txt
2uv pip compile requirements.in -o requirements.txt
3
4# 跨平台通用锁定
5uv pip compile requirements.in --universal -o requirements.txt
6
7# 同步环境到锁定文件
8uv pip sync requirements.txt7. 常用命令速查
| 场景 | 命令 |
|---|---|
| 创建项目 | uv init myproject |
| 添加依赖 | uv add requests |
| 添加开发依赖 | uv add --dev pytest |
| 运行脚本 | uv run main.py |
| 同步依赖 | uv sync |
| 运行工具 | uvx ruff check . |
| 安装工具 | uv tool install ruff |
| 安装 Python | uv python install 3.12 |
| 创建虚拟环境 | uv venv |
| 升级 uv | uv self update |
8. 配置文件示例
pyproject.toml
TOML
1[project]
2name = "myproject"
3version = "0.1.0"
4description = "My awesome project"
5requires-python = ">=3.10"
6dependencies = [
7 "fastapi>=0.100",
8 "uvicorn",
9]
10
11[dependency-groups]
12dev = ["pytest", "ruff"]
13
14[tool.uv]
15# uv 特定配置
16dev-dependencies = ["pytest>=8.0"].python-version
Plain Text
13.12总结
uv 的核心操作可以概括为:
- 项目开发:
uv init→uv add→uv run - 脚本运行:
uv add --script→uv run - 工具使用:
uvx临时运行,uv tool install全局安装 - Python 管理:
uv python install自动下载安装
从今天开始用 uv,告别缓慢的 pip 和混乱的环境管理吧!
参考资料:uv 官方文档
最后更新: 11月29日 10:22
非常好技术教程,狠狠调教我的 python 目录的说