🚀 快速安装

复制以下命令并运行,立即安装此 Skill:

npx skills add https://github.com/wshobson/agents --skill uv-package-manager

💡 提示:需要 Node.js 和 NPM

UV 包管理器

使用 uv 的全面指南,这是一个用 Rust 编写的极速 Python 包安装器和解析器,适用于现代 Python 项目管理和依赖工作流。

何时使用此技能

  • 快速搭建新的 Python 项目
  • 比 pip 更快地管理 Python 依赖
  • 创建和管理虚拟环境
  • 安装 Python 解释器
  • 高效解决依赖冲突
  • 从 pip/pip-tools/poetry 迁移
  • 加速 CI/CD 流程
  • 管理 monorepo Python 项目
  • 使用锁文件实现可重现的构建
  • 优化带有 Python 依赖的 Docker 构建

核心概念

1. uv 是什么?

  • 超快包安装器:比 pip 快 10-100 倍
  • Rust 编写:利用 Rust 的高性能
  • 即插即用的 pip 替代品:兼容 pip 工作流
  • 虚拟环境管理器:创建和管理虚拟环境
  • Python 安装器:下载和管理 Python 版本
  • 解析器:高级依赖解析功能
  • 锁文件支持:可重现的安装

2. 主要特性

  • 极速安装
  • 通过全局缓存节省磁盘空间
  • 兼容 pip、pip-tools、poetry
  • 全面的依赖解析
  • 跨平台支持(Linux、macOS、Windows)
  • 安装无需 Python
  • 内置虚拟环境支持

3. UV 与传统工具对比

  • 对比 pip:快 10-100 倍,解析器更好
  • 对比 pip-tools:更快、更简单、用户体验更好
  • 对比 poetry:更快、更少约束、更轻量
  • 对比 conda:更快、专注于 Python

安装

快速安装

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

# Windows (PowerShell)
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

# 使用 pip 安装(如果已安装 Python)
pip install uv

# 使用 Homebrew (macOS)
brew install uv

# 使用 cargo(如果已安装 Rust)
cargo install --git https://github.com/astral-sh/uv uv

验证安装

uv --version
# uv 0.x.x

快速开始

创建新项目

# 创建带虚拟环境的新项目
uv init my-project
cd my-project

# 或在当前目录创建
uv init .

# 初始化创建以下文件:
# - .python-version(Python 版本)
# - pyproject.toml(项目配置)
# - README.md
# - .gitignore

安装依赖

# 安装包(如需会自动创建虚拟环境)
uv add requests pandas

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

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

# 从 pyproject.toml 安装
uv sync

虚拟环境管理

模式 1:创建虚拟环境

# 使用 uv 创建虚拟环境
uv venv

# 使用指定 Python 版本创建
uv venv --python 3.12

# 使用自定义名称创建
uv venv my-env

# 创建带系统站点包的环境
uv venv --system-site-packages

# 指定位置
uv venv /path/to/venv

模式 2:激活虚拟环境

# Linux/macOS
source .venv/bin/activate

# Windows (命令提示符)
.venv\Scripts\activate.bat

# Windows (PowerShell)
.venv\Scripts\Activate.ps1

# 或者使用 uv run(无需激活)
uv run python script.py
uv run pytest

模式 3:使用 uv run

# 运行 Python 脚本(自动激活虚拟环境)
uv run python app.py

# 运行已安装的 CLI 工具
uv run black .
uv run pytest

# 使用指定 Python 版本运行
uv run --python 3.11 python script.py

# 传递参数
uv run python script.py --arg value

包管理

模式 4:添加依赖

# 添加包(会添加到 pyproject.toml)
uv add requests

# 添加带版本约束的包
uv add "django>=4.0,<5.0"

# 添加多个包
uv add numpy pandas matplotlib

# 添加开发依赖
uv add --dev pytest pytest-cov

# 添加可选依赖组
uv add --optional docs sphinx

# 从 git 添加
uv add git+https://github.com/user/repo.git

# 从 git 添加并指定引用
uv add git+https://github.com/user/repo.git@v1.0.0

# 从本地路径添加
uv add ./local-package

# 以可编辑模式添加本地包
uv add -e ./local-package

模式 5:移除依赖

# 移除包
uv remove requests

# 移除开发依赖
uv remove --dev pytest

# 移除多个包
uv remove numpy pandas matplotlib

模式 6:升级依赖

# 升级指定包
uv add --upgrade requests

# 升级所有包
uv sync --upgrade

# 显示可升级的包
uv tree --outdated

模式 7:锁定依赖

# 生成 uv.lock 文件
uv lock

# 更新锁文件
uv lock --upgrade

# 只锁定不安装
uv lock --no-install

# 锁定指定包
uv lock --upgrade-package requests

Python 版本管理

模式 8:安装 Python 版本

# 安装 Python 版本
uv python install 3.12

# 安装多个版本
uv python install 3.11 3.12 3.13

# 安装最新版本
uv python install

# 列出已安装版本
uv python list

# 查找可用版本
uv python list --all-versions

模式 9:设置 Python 版本

# 为项目设置 Python 版本
uv python pin 3.12

# 这会创建/更新 .python-version 文件

# 为命令指定 Python 版本
uv --python 3.11 run python script.py

# 使用指定版本创建虚拟环境
uv venv --python 3.12

项目配置

模式 10:使用 uv 的 pyproject.toml

[project]
name = "my-project"
version = "0.1.0"
description = "我的超棒项目"
readme = "README.md"
requires-python = ">=3.8"
dependencies = [
    "requests>=2.31.0",
    "pydantic>=2.0.0",
    "click>=8.1.0",
]

[project.optional-dependencies]
dev = [
    "pytest>=7.4.0",
    "pytest-cov>=4.1.0",
    "black>=23.0.0",
    "ruff>=0.1.0",
    "mypy>=1.5.0",
]
docs = [
    "sphinx>=7.0.0",
    "sphinx-rtd-theme>=1.3.0",
]

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[tool.uv]
dev-dependencies = [
    # 由 uv 管理的额外开发依赖
]

[tool.uv.sources]
# 自定义包源
my-package = { git = "https://github.com/user/repo.git" }

模式 11:在现有项目中使用 uv

# 从 requirements.txt 迁移
uv add -r requirements.txt

# 从 poetry 迁移
# 已有 pyproject.toml,直接使用:
uv sync

# 导出到 requirements.txt
uv pip freeze > requirements.txt

# 带哈希值导出(更安全)
uv pip freeze --require-hashes > requirements.txt

高级工作流

模式 12:Monorepo 支持

# 项目结构
# monorepo/
#   packages/
#     package-a/
#       pyproject.toml
#     package-b/
#       pyproject.toml
#   pyproject.toml (根目录)

# 根目录 pyproject.toml
[tool.uv.workspace]
members = ["packages/*"]

# 安装所有 workspace 包
uv sync

# 添加 workspace 依赖
uv add --path ./packages/package-a

模式 13:CI/CD 集成

# .github/workflows/test.yml
name: 测试

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: 安装 uv
        uses: astral-sh/setup-uv@v2
        with:
          enable-cache: true

      - name: 设置 Python
        run: uv python install 3.12

      - name: 安装依赖
        run: uv sync --all-extras --dev

      - name: 运行测试
        run: uv run pytest

      - name: 运行代码检查
        run: |
          uv run ruff check .
          uv run black --check .

模式 14:Docker 集成

# Dockerfile
FROM python:3.12-slim

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

# 设置工作目录
WORKDIR /app

# 复制依赖文件
COPY pyproject.toml uv.lock ./

# 安装依赖
RUN uv sync --frozen --no-dev

# 复制应用程序代码
COPY . .

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

优化的多阶段构建:

# 多阶段 Dockerfile
FROM python:3.12-slim AS builder

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

WORKDIR /app

# 安装依赖到虚拟环境
COPY pyproject.toml uv.lock ./
RUN uv sync --frozen --no-dev --no-editable

# 运行时阶段
FROM python:3.12-slim

WORKDIR /app

# 从构建阶段复制虚拟环境
COPY --from=builder /app/.venv .venv
COPY . .

# 使用虚拟环境
ENV PATH="/app/.venv/bin:$PATH"

CMD ["python", "app.py"]

模式 15:锁文件工作流

# 创建锁文件 (uv.lock)
uv lock

# 从锁文件安装(精确版本)
uv sync --frozen

# 更新锁文件但不安装
uv lock --no-install

# 升级锁文件中的指定包
uv lock --upgrade-package requests

# 检查锁文件是否最新
uv lock --check

# 导出锁文件到 requirements.txt
uv export --format requirements-txt > requirements.txt

# 带哈希值导出(更安全)
uv export --format requirements-txt --hash > requirements.txt

性能优化

模式 16:使用全局缓存

# UV 自动使用全局缓存,位置:
# Linux: ~/.cache/uv
# macOS: ~/Library/Caches/uv
# Windows: %LOCALAPPDATA%\uv\cache

# 清理缓存
uv cache clean

# 检查缓存大小
uv cache dir

模式 17:并行安装

# UV 默认并行安装包

# 控制并行度
uv pip install --jobs 4 package1 package2

# 串行安装(无并行)
uv pip install --jobs 1 package

模式 18:离线模式

# 仅从缓存安装(无需网络)
uv pip install --offline package

# 离线从锁文件同步
uv sync --frozen --offline

与其他工具对比

uv 对比 pip

# pip
python -m venv .venv
source .venv/bin/activate
pip install requests pandas numpy
# 约 30 秒

# uv
uv venv
uv add requests pandas numpy
# 约 2 秒(快 10-15 倍)

uv 对比 poetry

# poetry
poetry init
poetry add requests pandas
poetry install
# 约 20 秒

# uv
uv init
uv add requests pandas
uv sync
# 约 3 秒(快 6-7 倍)

uv 对比 pip-tools

# pip-tools
pip-compile requirements.in
pip-sync requirements.txt
# 约 15 秒

# uv
uv lock
uv sync --frozen
# 约 2 秒(快 7-8 倍)

常见工作流

模式 19:启动新项目

# 完整工作流
uv init my-project
cd my-project

# 设置 Python 版本
uv python pin 3.12

# 添加依赖
uv add fastapi uvicorn pydantic

# 添加开发依赖
uv add --dev pytest black ruff mypy

# 创建目录结构
mkdir -p src/my_project tests

# 运行测试
uv run pytest

# 格式化代码
uv run black .
uv run ruff check .

模式 20:维护现有项目

# 克隆仓库
git clone https://github.com/user/project.git
cd project

# 安装依赖(自动创建虚拟环境)
uv sync

# 安装包括开发依赖
uv sync --all-extras

# 更新依赖
uv lock --upgrade

# 运行应用程序
uv run python app.py

# 运行测试
uv run pytest

# 添加新依赖
uv add new-package

# 提交更新的文件
git add pyproject.toml uv.lock
git commit -m "添加 new-package 依赖"

工具集成

模式 21:预提交钩子

# .pre-commit-config.yaml
repos:
  - repo: local
    hooks:
      - id: uv-lock
        name: uv lock
        entry: uv lock
        language: system
        pass_filenames: false

      - id: ruff
        name: ruff
        entry: uv run ruff check --fix
        language: system
        types: [python]

      - id: black
        name: black
        entry: uv run black
        language: system
        types: [python]

模式 22:VS Code 集成

// .vscode/settings.json
{
  "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
  "python.terminal.activateEnvironment": true,
  "python.testing.pytestEnabled": true,
  "python.testing.pytestArgs": ["-v"],
  "python.linting.enabled": true,
  "python.formatting.provider": "black",
  "[python]": {
    "editor.defaultFormatter": "ms-python.black-formatter",
    "editor.formatOnSave": true
  }
}

故障排除

常见问题

# 问题:找不到 uv 命令
# 解决方案:添加到 PATH 或重新安装
echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc

# 问题:错误的 Python 版本
# 解决方案:明确指定版本
uv python pin 3.12
uv venv --python 3.12

# 问题:依赖冲突
# 解决方案:检查解析过程
uv lock --verbose

# 问题:缓存问题
# 解决方案:清理缓存
uv cache clean

# 问题:锁文件不同步
# 解决方案:重新生成
uv lock --upgrade

最佳实践

项目设置

  1. 始终使用锁文件 以确保可重现性
  2. 固定 Python 版本 使用 .python-version 文件
  3. 分离开发依赖 和生产依赖
  4. 使用 uv run 而不是手动激活虚拟环境
  5. 提交 uv.lock 到版本控制
  6. 在 CI 中使用 –frozen 确保构建一致性
  7. 利用全局缓存 提升速度
  8. 对 monorepo 使用 workspace 功能
  9. 导出 requirements.txt 以保证兼容性
  10. 保持 uv 更新 以获取最新功能

性能优化技巧

# 在 CI 中使用 frozen 安装
uv sync --frozen

# 尽可能使用离线模式
uv sync --offline

# 并行操作(自动)
# uv 默认启用并行

# 跨环境重用缓存
# uv 全局共享缓存

# 使用锁文件跳过解析过程
uv sync --frozen  # 跳过依赖解析

迁移指南

从 pip + requirements.txt 迁移

# 迁移前
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

# 迁移后
uv venv
uv pip install -r requirements.txt
# 或者更好:
uv init
uv add -r requirements.txt

从 Poetry 迁移

# 迁移前
poetry install
poetry add requests

# 迁移后
uv sync
uv add requests

# 保留现有的 pyproject.toml
# uv 可以读取 [project] 和 [tool.poetry] 部分

从 pip-tools 迁移

# 迁移前
pip-compile requirements.in
pip-sync requirements.txt

# 迁移后
uv lock
uv sync --frozen

命令参考

基本命令

# 项目管理
uv init [PATH]              # 初始化项目
uv add PACKAGE              # 添加依赖
uv remove PACKAGE           # 移除依赖
uv sync                     # 安装依赖
uv lock                     # 创建/更新锁文件

# 虚拟环境
uv venv [PATH]              # 创建虚拟环境
uv run COMMAND              # 在虚拟环境中运行命令

# Python 管理
uv python install VERSION   # 安装 Python
uv python list              # 列出已安装的 Python 版本
uv python pin VERSION       # 固定 Python 版本

# 包安装(兼容 pip)
uv pip install PACKAGE      # 安装包
uv pip uninstall PACKAGE    # 卸载包
uv pip freeze               # 列出已安装的包(带版本)
uv pip list                 # 列出包

# 实用工具
uv cache clean              # 清理缓存
uv cache dir                # 显示缓存位置
uv --version                # 显示版本

📄 原始文档

完整文档(英文):

https://skills.sh/wshobson/agents/uv-package-manager

💡 提示:点击上方链接查看 skills.sh 原始英文文档,方便对照翻译。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。