python新工具-uv包管理工具
uv
是一个由 Astral (Ruff 的创建者) 开发的极速 Python 包和项目管理器,用 Rust 编写。它旨在作为传统 Python 包管理工具(如 pip
、pip-tools
、pipx
、poetry
、pyenv
、twine
和 virtualenv
等)的替代品,通过其高性能和多功能集成,解决 Python 生态系统中常见的痛点,例如安装速度慢、依赖冲突和环境管理复杂性。
1. uv
工具的基本介绍、背景和主要功能
uv
的核心目标是提供一个统一、高效的解决方案,以简化 Python 项目的开发工作流。
背景:
Python 的包管理生态系统长期以来存在一些挑战,包括安装速度慢、依赖解析效率低以及工具链碎片化(需要使用多个工具来完成不同的任务)。uv
的出现旨在通过 Rust 的性能优势和一体化设计,克服这些问题,提供一个更快速、更可靠、更易用的开发体验。
主要功能:
- 极速性能:比
pip
快 10-100 倍,尤其在处理大型项目和复杂依赖时表现出色。 - 一体化解决方案:集成了
pip
、pip-tools
、pipx
、poetry
、pyenv
、twine
和virtualenv
等多种工具的功能,简化了工作流。 - 全面的项目管理:提供统一的锁文件 (
uv.lock
),确保环境的可复现性。 - 虚拟环境管理:内置虚拟环境创建和管理功能,无需单独使用
virtualenv
或venv
。 - Python 版本管理:支持安装和管理多个 Python 版本。
- 脚本执行:能够运行带有内联依赖元数据的脚本。
- 命令行工具管理:可以运行和安装作为 Python 包发布的命令行工具(类似于
pipx
)。 - 兼容
pip
接口:提供pip
兼容接口,方便现有项目平滑迁移。 - 磁盘空间效率:通过全局缓存实现依赖去重,节省磁盘空间。
- 跨平台支持:支持 macOS、Linux 和 Windows 操作系统。
- 无需 Rust 或 Python 即可安装:可以通过
curl
或pip
轻松安装。
2. uv
工具的安装方法和基本使用流程
uv
的安装非常便捷,并且提供了多种方式。
安装方法:
- 独立安装程序 (推荐):
- macOS 和 Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh # 或者指定版本 curl -LsSf https://astral.sh/uv/install.sh | sh -s -- --version 0.6.12
- Windows (PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
- macOS 和 Linux:
- 通过
pipx
安装:
(需要先安装pipx install uv
pipx
) - 通过
pip
安装:
(不推荐全局安装,可能导致系统 Python 环境混乱)pip install uv
更新 uv
:
- 如果通过独立安装程序安装:
uv self update
- 如果通过
pipx
安装:pipx upgrade uv
基本使用流程:
-
验证安装:
uv --version
应显示
uv
的版本信息。 -
创建虚拟环境:
uv
可以自动管理虚拟环境。你也可以手动创建:uv venv # 或指定 Python 版本 uv venv --python 3.12.0
这会在当前目录下创建一个名为
.venv
的虚拟环境。 -
激活虚拟环境:
source .venv/bin/activate # macOS/Linux .venv\Scripts\activate # Windows
-
安装依赖:
- 安装单个包:
uv add requests
- 安装
requirements.txt
中的依赖:uv pip install -r requirements.txt
- 同步锁文件中的依赖:
uv pip sync docs/requirements.txt
- 安装单个包:
-
运行脚本或命令:
uv run
会自动锁定和同步项目依赖,然后执行命令。uv run python your_script.py
3. uv
工具的使用示例和最佳实践
uv
提供了丰富的功能来管理 Python 项目的生命周期。
项目初始化与依赖管理:
-
初始化新项目:
uv init my_project cd my_project
这会创建一个包含
.git/
、.gitignore
、.python-version
、README.md
、main.py
和pyproject.toml
的项目结构。 -
添加依赖:
uv add requests pandas
这会将
requests
和pandas
添加到pyproject.toml
的[project].dependencies
中,并自动更新uv.lock
文件。 -
添加开发依赖:
uv add ruff --dev
这会将
ruff
添加到pyproject.toml
的[project].optional-dependencies
或[tool.uv.dependency-groups]
中。 -
移除依赖:
uv remove requests
-
锁文件 (
uv.lock
):
uv
会自动生成和管理uv.lock
文件,其中包含所有依赖的精确版本。最佳实践是将其提交到版本控制中,以确保团队成员和部署环境之间的一致性。 -
编译
requirements.txt
:
如果你需要生成pip
兼容的requirements.txt
文件:uv pip compile docs/requirements.in --universal --output-file docs/requirements.txt
命令行工具管理:
-
临时运行工具 (
uvx
):
uvx
是uv tool run
的别名,它会在一个临时的、隔离的环境中运行工具,而无需全局安装。uvx pycowsay 'hello from uv' uvx ruff check
这对于不经常使用的工具或避免全局环境污染非常有用。
-
全局安装工具:
uv tool install ruff
安装后,工具的可执行文件会添加到
PATH
中,可以直接调用。 -
升级已安装工具:
uv tool upgrade ruff
脚本执行:
- 运行带有内联元数据的脚本:
uv
可以读取脚本文件中的内联元数据来安装和运行其依赖。echo 'import requests; print(requests.get("https://www.example.com"))' > example.py uv add --script example.py requests uv run example.py
构建和发布包:
-
构建分发包:
uv build
这会生成源代码分发包 (
.tar.gz
) 和轮子文件 (.whl
)。 -
发布包到 PyPI:
uv publish
(通常需要配置 PyPI 凭据,例如通过
~/.pypirc
文件或环境变量)
CI/CD 集成:
uv
提供了与持续集成/持续部署 (CI/CD) 流程的良好集成。
-
GitHub Actions:
推荐使用官方的astral-sh/setup-uv
Action 来安装uv
并配置缓存。name: Example jobs:uv-example:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v4- name: Install uvuses: astral-sh/setup-uv@v5with:version: 0.6.12 # 固定 uv 版本
-
GitLab CI/CD:
Astral 提供了预装uv
的 Docker 镜像,可以直接在.gitlab-ci.yml
中使用。variables:UV_VERSION: "0.5"PYTHON_VERSION: "3.12"BASE_LAYER: bookworm-slim uv:image: ghcr.io/astral-sh/uv:$UV_VERSION-python$PYTHON_VERSION-$BASE_LAYER
uv
与其他工具的比较:
下表总结了 uv
与 pip
、virtualenv
、Conda
和 Poetry
的主要区别:
特性 | uv | PIP + virtualenv | Conda | Poetry |
---|---|---|---|---|
实现语言 | Rust | Python | Python | Python |
速度 | 比 pip 快 10-100 倍 | 基准 | 比 pip 慢 | 比 pip 快 |
内存使用 | 非常高效 | 较高 | 高 | 中等 |
环境管理 | 内置 | 需要单独工具 | 内置 | 内置 |
依赖解析 | 快速,现代化解析器 | 基本 | 全面 | 现代化解析器 |
非 Python 包 | 否 | 否 | 是 | 否 |
锁文件 | 是 (uv.lock ) | 否 (基本 requirements.txt ) | 是 | 是 |
项目结构 | 是 | 否 | 否 | 是 |
包发布 | 是 | 是 (配合 twine ) | 是 | 是 |
兼容性 | 与现有 pip 生态系统兼容 | 标准 Python 工具 | 独立生态系统 | 更具主观性 |
错误处理 | 清晰的错误信息 | 基本 | 良好 | 良好 |
资源占用 | 极小 | 中等 | 重 | 中等 |
科学计算重点 | 否 | 否 | 是 | 否 |
跨平台一致性 | 良好 | 有限 | 优秀 | 良好 |