在 Python 开发中,包管理一直是一个关键但有时令人头疼的问题。从 pip 到 pipenv,再到 poetry,我们一直在寻找更好的解决方案。现在,一个全新的工具出现了——UV,由 Astral 团队开发(也是 Ruff 的创建者),它正在改变我们对 Python 包管理的认知。

什么是 UV?

UV 是一个用 Rust 编写的极速 Python 包解析器和安装器,可以作为 pip 和 pip-tools 工作流的直接替代品。它的速度令人惊叹——比传统的 pip 快 10-100 倍!

主要特性

  • 极速:比 pip 快 10-100 倍
  • 🐍 Python 兼容:支持 Python 3.7+
  • 🔧 简单易用:熟悉的命令行界面
  • 🌐 生产就绪:适用于开发和生产环境
  • 📦 多功能:包安装、虚拟环境管理、项目初始化

安装 UV

在 Linux 和 macOS 上

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

或者使用 pip:

pip install uv

在 Windows 上

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

使用包管理器

Homebrew (macOS/Linux):

brew install uv

Pipx:

pipx install uv

基本使用

1. 初始化新项目

# 创建新项目
uv init my-project
cd my-project

# 或者使用指定 Python 版本
uv init my-project --python 3.11

2. 安装包

# 安装单个包
uv add requests

# 安装多个包
uv add flask pandas numpy

# 安装开发依赖
uv add --dev pytest black flake8

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

3. 虚拟环境管理

UV 自动管理虚拟环境,但你也可以手动控制:

# 创建虚拟环境
uv venv

# 使用特定 Python 版本
uv venv --python 3.11

# 激活虚拟环境
source .venv/bin/activate  # Linux/macOS
.venv\Scripts\activate     # Windows

4. 依赖管理

# 生成 requirements.txt
uv pip freeze > requirements.txt

# 安装所有依赖
uv pip install -r requirements.txt

# 同步环境(精确匹配)
uv pip sync requirements.txt

高级功能

1. 快速项目初始化

# 一键创建完整项目结构
uv init my-app --package --src --git

这会创建:

  • pyproject.toml 配置文件
  • 源代码目录结构
  • Git 仓库和 .gitignore

2. 并行安装

UV 默认使用并行安装来最大化速度:

# 使用 8 个并行任务(默认)
uv add pandas

# 自定义并行任务数
UV_JOBS=4 uv add numpy scipy

3. 缓存优化

UV 具有智能缓存系统:

# 清理缓存
uv cache clean

# 查看缓存信息
uv cache info

4. 平台特定依赖

# 仅限 Windows 的依赖
uv add pywin32 --platform windows

# 仅限 Linux 的依赖
uv add linux-specific-pkg --platform linux

工作流示例

开发工作流

# 1. 创建新项目
uv init my-api-project
cd my-api-project

# 2. 添加生产依赖
uv add fastapi uvicorn

# 3. 添加开发依赖
uv add --dev pytest httpx black

# 4. 运行开发服务器
uv run uvicorn main:app --reload

CI/CD 工作流

# .github/workflows/test.yml
name: Test

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: astral-sh/setup-uv@v1
        with:
          python-version: "3.11"
      
      - run: uv sync --dev
      - run: uv run pytest

生产环境部署

FROM python:3.11-slim

WORKDIR /app

# 安装 uv
RUN pip install uv

# 复制依赖文件
COPY pyproject.toml .

# 安装依赖(不使用虚拟环境)
RUN uv pip install --system -r pyproject.toml

# 复制应用代码
COPY . .

CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0"]

性能对比

让我们看看 UV 与其他工具的性能对比:

操作

pip

Poetry

UV

速度提升

安装 requests

2.1s

3.4s

0.3s

7x

安装 pandas + numpy

28.4s

31.2s

4.1s

7x

创建虚拟环境

1.2s

2.1s

0.1s

12x

依赖解析

5.8s

4.2s

0.4s

10x

配置技巧

1. 全局配置

# 设置默认 Python 版本
uv config set default-python 3.11

# 启用彩色输出
uv config set color always

# 设置缓存目录
uv config set cache-dir /path/to/cache

2. 环境变量

# 控制并行任务数
export UV_JOBS=8

# 设置超时时间
export UV_TIMEOUT=30

# 启用详细日志
export UV_LOG_LEVEL=debug

3. Pyproject.toml 配置

[project]
name = "my-project"
version = "0.1.0"
dependencies = [
    "requests>=2.25.0",
    "flask>=2.0.0",
]

[project.optional-dependencies]
dev = [
    "pytest>=6.0",
    "black>=21.0",
]

[tool.uv]
index-url = "https://pypi.tuna.tsinghua.edu.cn/simple"
trusted-host = "pypi.tuna.tsinghua.edu.cn"

常见问题解答

Q: UV 与 pip 兼容吗?

A: 是的!UV 完全兼容 pip 的工作流,可以直接使用 requirements.txt 文件。

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

A: 当然可以!只需在现有项目目录中运行 uv add 命令即可。

Q: UV 支持私有包索引吗?

A: 支持,配置方式与 pip 相同:

uv config set index-url https://your-private-index.com/simple
uv config set extra-index-url https://pypi.org/simple

Q: 如何从其他工具迁移?

A: 迁移非常简单:

  • pip:直接使用 uv pip install -r requirements.txt
  • Poetry:使用 uv add 添加 pyproject.toml 中的依赖
  • Pipenv:导出 requirements.txt 然后使用 UV

总结

UV 代表了 Python 包管理的未来方向:

  • 🚀 惊人的速度:节省宝贵的开发时间
  • 💻 友好的用户体验:直观的命令行界面
  • 🛠️ 强大的功能:满足各种使用场景
  • 🔄 完美的兼容性:与现有生态无缝集成

无论你是 Python 新手还是经验丰富的开发者,UV 都值得一试。它的速度和易用性将彻底改变你的开发工作流。

立即尝试 UV,体验极速的 Python 包管理!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐