uv 是 Astral 推出的 Python包管理与项目管理工具,目标是替代:
pip
virtualenv
pip-tools
poetry
pyenv(部分能力)
核心特点:
- Rust 编写,速度极快
- 原生虚拟环境管理
- 锁文件管理
- 兼容
pyproject.toml
- 支持 workspace
- 支持 Python 安装管理
uv 官方文档
1.安装 uv
1.1 Linux / macOS
1
| curl -LsSf https://astral.sh/uv/install.sh | sh
|
验证:
1.2 Homebrew
1.3 Windows
1
| powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
|
2.创建 Python 项目
2.1 最基础创建
目录:
1 2 3 4 5
| myapp/ ├── .python-version ├── README.md ├── main.py ├── pyproject.toml
|
进入项目:
运行:
2.2 创建包项目(推荐)
创建可发布 package:
结构:
1 2 3 4 5 6
| mylib/ ├── pyproject.toml ├── README.md ├── src/ │ └── mylib/ │ └── __init__.py
|
这是现代 Python 推荐结构。
3.创建虚拟环境
3.1 自动创建
执行:
会自动:
目录:
3.2 指定 Python 版本
或者:
1 2
| uv python install 3.12 uv venv --python 3.12
|
4.安装依赖
4.1 安装运行依赖
自动更新:
4.2 开发依赖
1
| uv add --dev pytest black ruff
|
4.3 指定版本
5.运行项目
5.1 运行 Python
5.2 运行模块
5.3 运行工具
1 2
| uv run pytest uv run ruff check .
|
无需手动 activate venv。
6.pyproject.toml 示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| [project] name = "myapp" version = "0.1.0" description = "example" readme = "README.md" requires-python = ">=3.11"
dependencies = [ "fastapi", "uvicorn", ]
[dependency-groups] dev = [ "pytest", "ruff", ]
[[tool.uv.index]] url="https://pypi.tuna.tsinghua.edu.cn/simple" default=true
|
7.常用命令速查
| 功能 |
命令 |
| 初始化项目 |
uv init |
| 初始化 package |
uv init --package |
| 创建 venv |
uv venv |
| 安装依赖 |
uv add |
| 删除依赖 |
uv remove |
| 安装全部依赖 |
uv sync |
| 更新锁文件 |
uv lock |
| 运行程序 |
uv run |
| 安装 Python |
uv python install |
8.推荐工作流(SRE/DevOps 场景)
8.1 创建服务
1 2
| uv init --package ai-service cd ai-service
|
8.2 安装依赖
1 2
| uv add fastapi uvicorn pydantic uv add --dev pytest ruff mypy
|
8.3 启动
1
| uv run uvicorn ai_service.main:app --reload
|
8.4 Docker 集成
1 2 3 4 5 6 7 8 9 10 11
| FROM python:3.12-slim
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
WORKDIR /app
COPY . .
RUN uv sync --frozen
CMD ["uv", "run", "python", "main.py"]
|
9.uv 工作流架构
flowchart TD
A[uv init] --> B[pyproject.toml]
B --> C[uv add]
C --> D[uv.lock]
D --> E[uv sync]
E --> F[.venv]
F --> G[uv run]