文章目录
- 一、uv 是什么
- 为什么需要 uv?
- 二、安装 uv
- macOS / Linux
- Windows
- 验证安装
- 三、核心命令速查表
- 四、实战:从零开始管理项目
- 场景 1:创建全新项目
- 场景 2:接管现有项目(如 MiroFish)
- 场景 3:指定 Python 版本
- 场景 4:运行 Python 脚本
- 五、uv 与传统工具对比
- 对比 pip
- 对比 Poetry
- 六、高级技巧
- 1. 查看依赖树
- 2. 检查依赖冲突
- 3. 更新依赖
- 4. 导出 requirements.txt
- 5. 从 requirements.txt 迁移
- 七、MiroFish 项目中的 uv 实践
- 八、常见问题
- Q1: uv 创建的虚拟环境在哪里?
- Q2: 如何删除虚拟环境重新创建?
- Q3: uv 和 pip 能混用吗?
- Q4: 如何指定国内镜像源?
- 九、总结
一、uv 是什么
uv是由 Astral 团队开发的 Python 包管理工具,用 Rust 编写,目标是替代pip、poetry、conda等传统工具。它的核心特点是极速——比 pip 快 10-100 倍。
为什么需要 uv?
想象 Python 包管理是一条物流系统:
| 传统工具 | 问题 | uv 的解决方案 |
|---|---|---|
| pip + venv | 串行下载、无全局缓存 | 并行下载 + 全局缓存 |
| poetry | 解析依赖慢、lock 文件复杂 | Rust 实现、毫秒级解析 |
| conda | 环境臃肿、启动慢 | 轻量级虚拟环境 |
二、安装 uv
macOS / Linux
curl-LsSfhttps://astral.sh/uv/install.sh|shWindows
powershell-ExecutionPolicy ByPass-c"irm https://astral.sh/uv/install.ps1 | iex"验证安装
uv--version# 输出: uv 0.9.26 (或更高版本)三、核心命令速查表
┌─────────────────┬─────────────────────────────────────┐ │ 命令 │ 作用 │ ├─────────────────┼─────────────────────────────────────┤ │ uv venv │ 创建虚拟环境 │ │ uv sync │ 同步依赖(根据 pyproject.toml) │ │ uv add │ 添加依赖包 │ │ uv remove │ 移除依赖包 │ │ uv run │ 在虚拟环境中运行命令 │ │ uv pip install │ 兼容 pip 的安装方式 │ │ uv lock │ 生成/更新 uv.lock 文件 │ └─────────────────┴─────────────────────────────────────┘四、实战:从零开始管理项目
场景 1:创建全新项目
# 1. 创建项目目录mkdirmyproject&&cdmyproject# 2. 初始化 Python 项目(生成 pyproject.toml)uv init--python3.11# 3. 添加依赖uvaddflask requests# 4. 添加开发依赖(仅开发时使用)uvadd--devpytest black# 5. 查看生成的 pyproject.tomlcatpyproject.toml生成的pyproject.toml示例:
[project] name = "myproject" version = "0.1.0" description = "Add your description here" requires-python = ">=3.11" dependencies = [ "flask>=3.0.0", "requests>=2.31.0", ] [project.optional-dependencies] dev = [ "pytest>=8.0.0", "black>=24.0.0", ]场景 2:接管现有项目(如 MiroFish)
# 进入已有 pyproject.toml 的项目cd/Users/lianggao/MyWorkSpace/001-360/personal/MiroFish-main/backend# 一键同步所有依赖uvsync# 这会:# - 创建 .venv/ 虚拟环境# - 安装 pyproject.toml 中所有依赖# - 生成 uv.lock 锁定文件场景 3:指定 Python 版本
# 方式 1:命令行指定uvsync--python3.11uvsync--python/usr/local/bin/python3.11# 方式 2:环境变量UV_PYTHON=3.11uvsync# 方式 3:项目固定版本(推荐)echo"3.11">.python-version场景 4:运行 Python 脚本
# 无需手动激活虚拟环境uv run python app.py# 运行模块uv run python-mpytest# 运行命令行工具uv run flask--appapp run五、uv 与传统工具对比
对比 pip
| 操作 | pip 方式 | uv 方式 |
|---|---|---|
| 创建环境 | python -m venv .venv | uv venv |
| 安装依赖 | pip install -r requirements.txt | uv sync或uv pip install |
| 运行脚本 | source .venv/bin/activate && python app.py | uv run python app.py |
| 速度 | 慢(串行) | 快(并行 + 缓存) |
对比 Poetry
| 特性 | Poetry | uv |
|---|---|---|
| 依赖解析 | 较慢 | 毫秒级 |
| lock 文件 | poetry.lock | uv.lock |
| 虚拟环境 | 自动管理 | 自动管理 |
| 构建后端 | 内置 | 支持 hatchling 等 |
六、高级技巧
1. 查看依赖树
uv pip tree2. 检查依赖冲突
uv pip check3. 更新依赖
# 更新所有依赖到最新版本uvsync--upgrade# 更新单个包uvaddflask--upgrade4. 导出 requirements.txt
uv pip freeze>requirements.txt5. 从 requirements.txt 迁移
# 一次性安装 requirements.txt 中的所有包uv pipinstall-rrequirements.txt# 然后转换为 pyproject.toml 管理(推荐)uvadd$(catrequirements.txt|grep-v'^#')七、MiroFish 项目中的 uv 实践
在 MiroFish 项目中,uv 的配置如下:
package.json:
"setup:backend":"cd backend && uv sync","backend":"cd backend && uv run python run.py"backend/pyproject.toml:
requires-python = ">=3.11" dependencies = [ "flask>=3.0.0", "openai>=1.0.0", "zep-cloud==3.13.0", "camel-oasis==0.2.5", # ... 其他依赖 ]日常开发流程:
# 1. 安装后端依赖npmrun setup:backend# 2. 启动后端服务(使用 uv run)npmrun backend# 或同时启动前后端npmrun dev八、常见问题
Q1: uv 创建的虚拟环境在哪里?
在项目的.venv/目录下,与 poetry 类似。
Q2: 如何删除虚拟环境重新创建?
rm-rf.venv uvsyncQ3: uv 和 pip 能混用吗?
不建议。uv 使用自己的元数据格式,混用可能导致状态不一致。
Q4: 如何指定国内镜像源?
# 设置环境变量exportUV_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple# 或在 pyproject.toml 中配置[[tool.uv.index]]url="https://pypi.tuna.tsinghua.edu.cn/simple"default=true九、总结
uv 是 Python 包管理的新一代标准,它的核心价值在于:
- 极速:Rust 实现,并行下载,全局缓存
- 简单:一条命令完成环境创建 + 依赖安装
- 兼容:支持 pyproject.toml 标准,易于迁移
- 统一:替代 pip + venv + poetry 的组合
对于 MiroFish 这样的全栈项目,uv 让 Python 后端的依赖管理变得和前端 npm 一样简单高效。