1. 什么是 uv? #
- uv官网
- uv 是用 Rust 编写的极速 Python 包管理器和项目工作流工具,可替代 pip + venv + pip-tools 的组合。
- 可以把 uv 理解成 pip 的超快升级版:一个命令完成项目初始化、依赖安装、虚拟环境管理和脚本运行。
- 现代 Python 项目越来越多采用
pyproject.toml+uv.lock管理依赖,uv 是这一工作流的核心工具。
1.1 核心功能 #
| 功能 | 传统方式 | uv |
|---|---|---|
| 包管理 | pip | 内置 |
| 虚拟环境 | venv | 内置,自动管理 |
| 依赖锁定 | pip-tools | 内置 uv.lock |
| 项目初始化 | 手动创建 | uv init |
| 运行脚本 | 需先激活环境 | uv run |
1.2 核心特点 #
- 速度比 pip 快 10–100 倍
- 一个工具统一工作流,无需在 pip、venv、pip-tools 之间切换
- 自动生成
uv.lock锁文件,确保环境可复现 - 支持 Windows、macOS、Linux
# 传统方式
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
# uv 方式
uv sync2. 为什么需要 uv? #
- 传统工具链(pip + venv + requirements.txt)步骤多、速度慢,新建项目环境往往需要数分钟。
- uv 将创建环境、解析依赖、安装包合并为少量命令,通常几十秒内完成。
uv run无需手动激活虚拟环境,减少"忘记激活导致包装错位置"的常见错误。
2.1 速度对比 #
| 操作 | pip + venv | uv |
|---|---|---|
| 创建虚拟环境 | 5–10 秒 | 1–2 秒 |
| 安装 pandas | 2–3 分钟 | 10–20 秒 |
| 安装大型项目 | 5–10 分钟 | 30–60 秒 |
2.2 适用场景 #
- 纯 Python 开发(Web、脚本、工具库)
- 追求快速依赖安装和环境复现
- 希望用
pyproject.toml统一管理项目配置
不适合:需要管理 CUDA、MKL 等非 Python 依赖时,仍应使用 Conda。
3. 前置知识 #
- 使用 uv 前建议先了解 pip 和虚拟环境的基本概念。
- uv 用
pyproject.toml声明项目依赖,用uv.lock锁定所有包的精确版本。 - uv 自动在项目目录下创建
.venv虚拟环境,一般无需手动激活。 - 现有
requirements.txt项目可通过uv pip install -r requirements.txt兼容使用。
3.1 pyproject.toml #
pyproject.toml 是 Python 项目的现代配置文件(TOML 格式),声明项目元数据和依赖:
[project] # 项目信息配置节
name = "my-project" # 项目名称
version = "0.1.0" # 项目版本
requires-python = ">=3.10" # 要求的 Python 版本
dependencies = [ # 项目所需依赖列表
"requests>=2.25", # 依赖 requests,需 2.25 及以上版本
"pandas>=1.5", # 依赖 pandas,需 1.5 及以上版本
]
[project.optional-dependencies] # 可选依赖配置节
dev = [ # 名为 dev 的可选依赖
"pytest>=7.0", # 测试依赖 pytest,需 7.0 及以上版本
]3.2 uv.lock 锁文件 #
uv.lock 精确记录所有直接和间接依赖的版本,确保任何人在任何时间 uv sync 都得到相同环境。
pyproject.toml:声明"需要什么包"(版本范围)uv.lock:锁定"实际安装了什么版本"(精确版本)uv.lock应提交到 Git,.venv/不应提交
4. 安装 uv #
- 推荐使用官方安装脚本,Windows 在 PowerShell 中执行,macOS/Linux 在终端中执行。
- 安装完成后运行
uv --version验证,显示版本号即表示成功。 - 若 PowerShell 报执行策略错误,先运行
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser。 - 安装后若提示找不到命令,关闭终端重新打开,或检查 PATH 是否包含 uv 安装路径。
4.1 Windows(PowerShell) #
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
uv --version如果 PowerShell 提示执行策略限制,运行以下命令:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser该命令允许当前用户运行本地及受信任的脚本,无需管理员权限,可解决“禁止运行脚本”的报错。
4.2 macOS / Linux #
curl -LsSf https://astral.sh/uv/install.sh | sh
source ~/.bashrc # 或 source ~/.zshrc
uv --version4.3 备选安装方式 #
pip install uv # 可用,但不如官方脚本新
brew install uv # macOS Homebrew5. 创建第一个项目 #
uv init创建项目目录并生成pyproject.toml和.gitignore。uv add添加依赖,自动更新pyproject.toml、生成uv.lock并安装到.venv。uv run在项目环境中运行脚本,无需手动激活虚拟环境。uv sync根据pyproject.toml和uv.lock同步依赖,团队成员克隆项目后只需执行此命令。
5.1 完整演示 #
# 1. 创建项目
uv init my-first-project
cd my-first-project
# 2. 添加依赖
uv add requests
# 3. 查看 pyproject.toml(requests 已自动写入 dependencies)
type pyproject.toml # Windows
# cat pyproject.toml # macOS/Linux
# 4. 创建测试脚本 test.py# test.py
import requests
response = requests.get('https://www.example.com')
print(f"状态码:{response.status_code}")# 5. 运行(无需激活虚拟环境)
uv run python test.py
# 6. 查看已安装的包
uv pip list预期输出:
状态码:2005.2 团队协作 #
其他成员克隆项目后:
uv sync
uv run python test.py6. uv 核心命令 #
- 日常开发围绕
init→add→run→sync四条命令展开。 uv add和uv remove会自动维护pyproject.toml和uv.lock,无需手动编辑锁文件。uv run是运行脚本和工具的首选方式,自动使用项目.venv中的依赖。uv pip提供 pip 兼容命令,可替代 pip 用于安装、卸载和查看包,速度更快。
6.1 项目管理 #
uv init my-project # 创建新项目
uv init . # 在当前目录初始化
uv init --python 3.10 my-project # 指定 Python 版本
uv sync # 同步依赖(读 pyproject.toml + uv.lock)
uv sync --upgrade # 升级所有依赖
uv lock # 只更新锁文件,不安装6.2 包管理 #
uv add requests # 添加依赖
uv add "requests==2.31.0" # 指定版本
uv add requests pandas numpy # 同时添加多个
uv add --dev pytest # 添加开发依赖
uv remove requests # 移除依赖
uv pip list # 查看已安装包
uv pip show requests # 查看包信息6.3 运行命令 #
uv run script.py # 运行脚本
uv run python script.py # 运行脚本
uv run python -m pytest # 运行模块6.4 pip 兼容命令 #
uv pip install requests # 安装(不写入 pyproject.toml)
uv pip install -r requirements.txt # 从 requirements.txt 安装
uv pip freeze > requirements.txt # 导出依赖
uv pip uninstall requests # 卸载7. pyproject.toml 基础 #
pyproject.toml是 uv 项目的依赖声明文件,替代传统的requirements.txt。[project]节定义项目名、版本、Python 版本要求和依赖列表。[project.optional-dependencies]可定义开发、测试等可选依赖组。uv add会自动修改此文件,一般无需手动编辑;了解结构有助于排查依赖问题。
7.1 常用字段 #
| 字段 | 说明 | 示例 |
|---|---|---|
name |
项目名称 | "my-project" |
version |
版本号 | "0.1.0" |
requires-python |
Python 版本要求 | ">=3.10" |
dependencies |
生产依赖 | ["requests>=2.25"] |
optional-dependencies |
可选依赖组 | dev = ["pytest>=7.0"] |
7.2 版本写法 #
dependencies = [
"requests==2.31.0", # 精确版本
"pandas>=1.5,<2.0", # 版本范围
]7.3 安装可选依赖组 #
uv sync --extra dev # 安装 dev 组依赖8. 完整工作流程 #
- 下面演示用 uv 从零搭建一个可分享的项目:初始化 → 添加依赖 → 写代码 → 同步分享。
- 与 pip + venv 流程相比,uv 省去了手动激活环境和维护
requirements.txt的步骤。 - 分享时提交
pyproject.toml和uv.lock,不提交.venv/。 - 接收方只需安装 uv 并执行
uv sync即可获得完全一致的环境。
# 1. 创建项目
uv init web-api
cd web-api
# 2. 添加依赖
uv add fastapi uvicorn requests
uv add --dev pytest
# 3. 编写 main.py 后运行
uv run uvicorn main:app --reload
# 4. 运行测试
uv run pytestmain.py
# 从fastapi模块中导入FastAPI类
from fastapi import FastAPI
# 创建一个FastAPI应用实例
app = FastAPI()
# 使用GET方法注册根路径"/"的路由
@app.get("/")
# 定义处理根路径请求的函数
def read_root():
# 返回一个包含问候语的JSON响应
return {"message": "Hello from web-api!"}
推荐项目结构:
web-api/
├── .venv/ # 虚拟环境(不提交 Git)
├── main.py # 项目代码
├── pyproject.toml # 项目配置(提交 Git)
├── uv.lock # 锁文件(提交 Git)
└── .gitignore团队成员使用:
git clone <项目地址>
cd web-api
uv sync
uv run uvicorn main:app --reload9. 配置镜像加速 #
- 国内访问 PyPI 较慢,配置镜像源可显著提升
uv add和uv sync的下载速度。 - 推荐通过配置文件永久设置,一次配置对所有项目生效。
- 也可通过环境变量
UV_INDEX_URL临时设置,适合 CI/CD 或单次测试。 - 配置后用
uv pip install -v requests观察下载 URL,确认是否来自镜像站。
9.1 方法一:配置文件(推荐) #
Windows 配置文件路径: %APPDATA%\uv\uv.toml
Linux/macOS 配置文件路径: ~/.config/uv/uv.toml
[[index]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple/"
default = true9.2 方法二:环境变量(临时) #
# Windows PowerShell
$env:UV_INDEX_URL="https://pypi.tuna.tsinghua.edu.cn/simple/"
# Windows CMD
set UV_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple/# macOS/Linux
export UV_INDEX_URL="https://pypi.tuna.tsinghua.edu.cn/simple/"9.3 常用国内镜像 #
- 清华:
https://pypi.tuna.tsinghua.edu.cn/simple/ - 阿里云:
https://mirrors.aliyun.com/pypi/simple/ - 中科大:
https://pypi.mirrors.ustc.edu.cn/simple/
10. 常见问题 #
- 找不到
uv命令时,重启终端或检查 PATH;Windows 默认安装在%USERPROFILE%\.local\bin。 uv sync慢通常是网络问题,配置国内镜像源后明显改善;第二次安装会利用缓存更快。uv add后包未生效,执行uv sync或检查.venv目录是否存在。uv.lock必须提交 Git,.venv/必须加入.gitignore。
10.1 uv 命令找不到 #
# 重启终端后验证
uv --version
# 若仍失败,检查安装路径是否在 PATH 中
# Windows 默认:C:\Users\<用户名>\.local\bin10.2 与现有 requirements.txt 项目兼容 #
# 方式一:直接用 uv pip 安装
uv pip install -r requirements.txt
# 方式二:迁移到 pyproject.toml
uv init .
# 手动将依赖写入 pyproject.toml,或用 uv add 逐个添加
uv sync10.3 Failed to hardlink files 警告 #
跨磁盘(如缓存在 C 盘、项目在 D 盘)时可能出现此警告,功能正常,可安全忽略:
set UV_LINK_MODE=copy或将缓存目录设到同一磁盘:
set UV_CACHE_DIR=D:\uv_cache10.4 VSCode CodeRunner 使用 uv #
{
"code-runner.executorMap": {
"python": "set PYTHONIOENCODING=utf8 && uv run $fullFileName"
}
}11. 总结 #
- uv 将包管理、虚拟环境、依赖锁定、脚本运行整合为一个极速工具,是现代 Python 项目的推荐工作流。
- 核心命令:
uv init→uv add→uv run→uv sync,配合pyproject.toml和uv.lock管理依赖。 - 提交
uv.lock到 Git,不提交.venv/;国内开发建议配置镜像源。 - pip/venv 基础见
1.pip.md和2.venv.md,本节是更高效的进阶方案。
11.1 最常用命令 #
uv --version # 检查版本
uv init project-name # 创建项目
uv add package-name # 添加依赖
uv add --dev pytest # 添加开发依赖
uv remove package-name # 移除依赖
uv sync # 同步依赖
uv sync --upgrade # 升级所有依赖
uv run python script.py # 运行脚本
uv pip list # 查看已安装包
uv pip install -r requirements.txt # 兼容 requirements.txt
uv lock # 更新锁文件11.2 最佳实践 #
- 每个项目独立
.venv,由 uv 自动管理 pyproject.toml声明依赖,uv.lock锁定版本,两者都提交 Git- 用
uv run运行脚本和工具,无需手动activate - 开发依赖用
uv add --dev,安装时用uv sync --extra dev - 国内环境配置镜像源,避免下载超时
11.3 核心概念 #
| 概念 | 说明 |
|---|---|
| uv | 极速 Python 包管理与项目工作流工具 |
| pyproject.toml | 项目配置与依赖声明文件 |
| uv.lock | 精确锁定所有依赖版本的锁文件 |
| uv run | 在项目环境中运行命令,无需激活环境 |