Python 包管理的新纪元:uv 全指南
在 Python 社区中,包管理一直是个让人头疼的问题。从传统的 pip 到 pip-tools,再到复杂的 poetry 和 pyenv,各有千秋但也各有痛点。直到 uv 的出现——这个由 Rust 编写、速度快到令人发指的工具,正在统一 Python 的开发流程。
一、 安装与环境准备
uv 的设计理念是“单文件、零依赖”。
1. 快速安装
Windows (PowerShell):
PowerShell
1
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
macOS/Linux:
Bash
1
curl -LsSf https://astral.sh/uv/install.sh | sh
2. 自动管理 Python 版本
uv 可以直接帮你下载 Python 解释器,无需再额外安装 pyenv 或去官网下载:
Bash
1 | uv python install 3.12 # 安装指定版本 |
二、 基础使用:从零开始一个项目
uv 强推“项目制”工作流,不再需要你手动去激活虚拟环境。
1. 初始化
Bash
1 | uv init my-project |
这会生成 pyproject.toml 和 .python-version 文件。
2. 管理依赖
- 添加依赖:
uv add requests - 添加开发依赖:
uv add --dev pytest - 删除依赖:
uv remove requests - 同步环境:
uv sync(根据配置文件强制将本地环境调整为一致)
3. 运行项目
你甚至不需要执行 source .venv/bin/activate。直接运行:
Bash
1 | uv run main.py |
uv 会自动在 .venv 中执行代码。如果环境没创建,它会自动创建并安装依赖。
三、 复杂使用:进阶技巧
1. 运行单文件脚本(无需项目)
如果你只有一个 script.py,但它依赖 pandas,你可以直接运行:
Bash
1 | uv run --with pandas script.py |
uv 会在临时环境中安装 pandas 并执行,运行完即焚,保持系统整洁。
2. 使用 uvx 运行工具
类似于 Node.js 的 npx,可以不安装包而直接运行其命令:
Bash
1 | uvx ruff check . # 使用 ruff 检查代码 |
3. 依赖分组 (Dependency Groups)
根据最新的 PEP 735,uv 支持将依赖分组管理(如 dev、docs、test):
Bash
1 | uv add --group docs mkdocs |
四、 常见配置与避坑指南
1. 网络与国内源配置
在中国开发,网络往往是最大的障碍。可以在项目根目录创建 uv.toml 或在 pyproject.toml 中配置:
Ini, TOML
1 | [[tool.uv.index]] |
2. 403 Forbidden 或超时错误
403 错误: 通常是镜像源(如清华源)触发了流量保护。建议切换至阿里云或腾讯云。
超时:
uv下载极快,如果网络波动,可以调高超时时间:PowerShell
1
$env:UV_HTTP_TIMEOUT = 120
3. 代理设置
uv 遵循标准环境变量:HTTP_PROXY 和 HTTPS_PROXY。
五、 文件作用解析:它们都是干什么的?
| 文件 / 文件夹 | 作用 | 是否提交到 Git |
|---|---|---|
pyproject.toml |
项目的核心配置文件,定义依赖、元数据和工具配置。 | 是 |
uv.lock |
锁定文件。精确记录每个包的版本和哈希值,确保团队环境一致。 | 是 |
.python-version |
指定该项目使用的 Python 版本。 | 是 |
.venv/ |
存放 Python 解释器和已安装包的物理目录。 | 否 |
uv.toml |
(可选) uv 的专项配置文件,如设置镜像源、并发限制等。 |
是 |
六、 为什么选择 uv?
- 快: 底层 Rust 编写,带全局缓存,安装过的包在第二个项目中瞬间“链接”完成。
- 全: 一个工具顶替了
pip、venv、pyenv、pip-tools。 - 稳:
uv.lock提供了比传统requirements.txt更可靠的复现性。
希望这篇文章能帮你快速上手这个 Python 开发者的神器!如果你正在寻找一个能让你从环境泥潭中解脱出来的方案,uv 就是唯一的答案。