体验一下刚上线的 cloude 4.0

什么是 uv?

uv 是一个由 Astral 团队开发的现代化 Python 包管理工具,使用 Rust 编写,旨在成为 pip、pip-tools、pipx、poetry、pyenv、twine、virtualenv 等工具的一站式替代方案。它的设计目标是提供极快的性能、简洁的用户体验,以及与现有 Python 生态系统的完美兼容性。

为什么选择 uv?

🚀 极致性能

  • 10-100倍 比 pip 和 pip-tools 更快的依赖解析速度
  • 使用 Rust 编写,天然的高性能优势
  • 并行下载和安装,充分利用系统资源

🎯 简单易用

  • 一个工具解决所有 Python 包管理需求
  • 与现有工具兼容,无需修改现有工作流
  • 直观的命令行界面

🔧 功能完整

  • 包安装和管理
  • 虚拟环境创建和管理
  • 项目依赖管理
  • Python 版本管理
  • 包发布功能

安装 uv

macOS 和 Linux

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

Windows

1
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

使用 pip 安装

1
pip install uv

使用 Homebrew (macOS)

1
brew install uv

基本使用

创建和管理虚拟环境

1
2
3
4
5
6
7
8
9
10
11
# 创建虚拟环境
uv venv

# 激活虚拟环境 (Linux/macOS)
source .venv/bin/activate

# 激活虚拟环境 (Windows)
.venv\Scripts\activate

# 创建指定 Python 版本的虚拟环境
uv venv --python 3.11

安装包

1
2
3
4
5
6
7
8
9
10
11
# 安装单个包
uv pip install requests

# 从 requirements.txt 安装
uv pip install -r requirements.txt

# 安装开发依赖
uv pip install -r requirements-dev.txt

# 同步依赖(类似 pip-sync)
uv pip sync requirements.txt

项目管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 初始化新项目
uv init my-project
cd my-project

# 添加依赖
uv add requests
uv add pytest --dev

# 移除依赖
uv remove requests

# 运行脚本
uv run script.py

# 运行命令
uv run pytest

高级功能

Python 版本管理

1
2
3
4
5
6
7
8
# 列出可用的 Python 版本
uv python list

# 安装特定 Python 版本
uv python install 3.11

# 使用特定 Python 版本创建项目
uv init --python 3.11 my-project

依赖锁定

uv 自动生成 uv.lock 文件,确保跨环境的依赖一致性:

1
2
3
4
5
# 更新锁定文件
uv lock

# 从锁定文件安装
uv sync

全局工具安装

1
2
3
4
5
6
7
8
9
10
# 安装全局工具
uv tool install black
uv tool install ruff

# 运行全局工具
uv tool run black .
uv tool run ruff check .

# 列出已安装的工具
uv tool list

性能对比

根据官方基准测试,uv 在各种场景下都显著优于传统工具:

操作 pip uv 性能提升
安装 Django 1.5s 0.1s 15x
解析依赖 10s 0.5s 20x
创建虚拟环境 2s 0.1s 20x

迁移指南

从 pip + pip-tools 迁移

如果你现在使用 pip 和 pip-tools:

1
2
3
4
5
6
7
8
# 替换 pip-compile
uv pip compile requirements.in

# 替换 pip-sync
uv pip sync requirements.txt

# 替换 pip install
uv pip install package-name

从 Poetry 迁移

1
2
3
4
5
# 将 pyproject.toml 转换为 uv 格式
uv init --from-poetry

# 安装依赖
uv sync

从 Pipenv 迁移

1
2
3
4
5
# 从 Pipfile 生成 requirements.txt
pipenv requirements > requirements.txt

# 使用 uv 安装
uv pip install -r requirements.txt

配置和定制

配置文件

uv 支持多种配置方式:

1
2
3
4
5
# pyproject.toml
[tool.uv]
index-url = "https://pypi.org/simple"
extra-index-url = ["https://my-custom-index.com/simple"]
trusted-host = ["my-custom-index.com"]

环境变量

1
2
3
4
5
6
7
8
# 设置索引 URL
export UV_INDEX_URL="https://pypi.org/simple"

# 设置缓存目录
export UV_CACHE_DIR="/path/to/cache"

# 禁用网络访问
export UV_OFFLINE=1

与 CI/CD 集成

GitHub Actions

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
name: CI
on: [push, pull_request]

jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v2
- name: Set up Python
run: uv python install 3.11
- name: Install dependencies
run: uv sync
- name: Run tests
run: uv run pytest

Docker

1
2
3
4
5
6
7
8
9
10
11
12
13
14
FROM python:3.11-slim

# 安装 uv
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv

# 复制项目文件
COPY . /app
WORKDIR /app

# 安装依赖
RUN uv sync --frozen

# 运行应用
CMD ["uv", "run", "python", "app.py"]

最佳实践

1. 使用项目模式

1
2
# 始终在项目根目录初始化
uv init .

2. 锁定依赖版本

1
2
# 定期更新锁定文件
uv lock --upgrade

3. 分离开发和生产依赖

1
2
3
4
5
6
# 添加开发依赖
uv add pytest --dev
uv add black --dev

# 生产环境只安装核心依赖
uv sync --no-dev

4. 使用工具管理

1
2
3
4
# 全局安装常用工具
uv tool install ruff
uv tool install black
uv tool install mypy

常见问题解答

Q: uv 与 pip 兼容吗?

A: 是的,uv 完全兼容 pip 的接口和 requirements.txt 格式。

Q: 可以在现有项目中使用 uv 吗?

A: 当然可以,uv 可以无缝替换现有的 pip 工作流。

Q: uv 支持私有仓库吗?

A: 支持,可以通过配置自定义索引 URL 来使用私有仓库。

Q: uv 的缓存在哪里?

A: 默认在 ~/.cache/uv,可以通过环境变量 UV_CACHE_DIR 自定义。

总结

uv 代表了 Python 包管理工具的未来方向。它不仅提供了卓越的性能,还简化了 Python 开发者的日常工作流程。无论你是新手还是经验丰富的开发者,uv 都能帮你更高效地管理 Python 项目。

如果你还在使用传统的 pip 或其他包管理工具,强烈建议尝试 uv。它的速度和便利性会让你的开发体验焕然一新。


想了解更多 uv 的使用技巧?访问 官方文档 获取最新信息。