一、uv 是什么

uv 是由 Astral 团队开发的 Python 包管理工具,用 Rust 编写,目标是替代 pippoetryconda 等传统工具。它的核心特点是极速——比 pip 快 10-100 倍。

为什么需要 uv?

想象 Python 包管理是一条物流系统

传统工具 问题 uv 的解决方案
pip + venv 串行下载、无全局缓存 并行下载 + 全局缓存
poetry 解析依赖慢、lock 文件复杂 Rust 实现、毫秒级解析
conda 环境臃肿、启动慢 轻量级虚拟环境

二、安装 uv

macOS / Linux

curl -LsSf https://astral.sh/uv/install.sh | sh

Windows

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. 创建项目目录
mkdir myproject && cd myproject

# 2. 初始化 Python 项目(生成 pyproject.toml)
uv init --python 3.11

# 3. 添加依赖
uv add flask requests

# 4. 添加开发依赖(仅开发时使用)
uv add --dev pytest black

# 5. 查看生成的 pyproject.toml
cat pyproject.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

# 一键同步所有依赖
uv sync

# 这会:
# - 创建 .venv/ 虚拟环境
# - 安装 pyproject.toml 中所有依赖
# - 生成 uv.lock 锁定文件

场景 3:指定 Python 版本

# 方式 1:命令行指定
uv sync --python 3.11
uv sync --python /usr/local/bin/python3.11

# 方式 2:环境变量
UV_PYTHON=3.11 uv sync

# 方式 3:项目固定版本(推荐)
echo "3.11" > .python-version

场景 4:运行 Python 脚本

# 无需手动激活虚拟环境
uv run python app.py

# 运行模块
uv run python -m pytest

# 运行命令行工具
uv run flask --app app run

五、uv 与传统工具对比

对比 pip

操作 pip 方式 uv 方式
创建环境 python -m venv .venv uv venv
安装依赖 pip install -r requirements.txt uv syncuv 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 tree

2. 检查依赖冲突

uv pip check

3. 更新依赖

# 更新所有依赖到最新版本
uv sync --upgrade

# 更新单个包
uv add flask --upgrade

4. 导出 requirements.txt

uv pip freeze > requirements.txt

5. 从 requirements.txt 迁移

# 一次性安装 requirements.txt 中的所有包
uv pip install -r requirements.txt

# 然后转换为 pyproject.toml 管理(推荐)
uv add $(cat requirements.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. 安装后端依赖
npm run setup:backend

# 2. 启动后端服务(使用 uv run)
npm run backend

# 或同时启动前后端
npm run dev

八、常见问题

Q1: uv 创建的虚拟环境在哪里?

在项目的 .venv/ 目录下,与 poetry 类似。

Q2: 如何删除虚拟环境重新创建?

rm -rf .venv
uv sync

Q3: uv 和 pip 能混用吗?

不建议。uv 使用自己的元数据格式,混用可能导致状态不一致。

Q4: 如何指定国内镜像源?

# 设置环境变量
export UV_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 包管理的新一代标准,它的核心价值在于:

  1. 极速:Rust 实现,并行下载,全局缓存
  2. 简单:一条命令完成环境创建 + 依赖安装
  3. 兼容:支持 pyproject.toml 标准,易于迁移
  4. 统一:替代 pip + venv + poetry 的组合

对于 MiroFish 这样的全栈项目,uv 让 Python 后端的依赖管理变得和前端 npm 一样简单高效。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐