返回博客2025年3月30日

uv 上手指南:高效全能的 Python 包管理新选择

Python包管理uv工具

uv 上手指南:高效全能的 Python 包管理新选择

你是否曾经等待 pip 安装依赖时感到焦躁?或者在处理复杂的 Python 环境管理时头疼不已?如果是,那么 uv 可能是你一直在寻找的解决方案。

作为一个用 Rust 编写的极速 Python 包管理器,uv 不仅速度惊人(比 pip 快 10-100 倍),还集成了多种工具的功能,可以替代 pip、pip-tools、pipx、poetry、pyenv、twine 和 virtualenv 等多个工具。今天,让我们一起探索这个令人兴奋的工具,看看它如何简化你的 Python 开发流程。

为什么选择 uv?

在深入了解 uv 的使用方法之前,我们先来看看它的主要优势:

uv 速度极快,在安装依赖时比传统工具快 10-100 倍。这种速度提升在处理大型项目时尤为明显。想象一下,原本需要几分钟的依赖安装现在只需几秒钟就能完成。

uv 提供了全面的项目管理功能,包括通用的锁文件格式,让你的项目依赖更加可控和可预测。

它能够运行脚本并支持内联依赖声明,简化了脚本执行的环境管理。

uv 可以安装和管理 Python 版本,无需额外的版本管理工具。

它支持类似 Cargo 的工作空间概念,使大型项目的组织更加灵活。

uv 采用磁盘空间高效的全局缓存机制,实现依赖的去重,节省存储空间。

最重要的是,uv 提供了与 pip 兼容的接口,让你在享受性能提升的同时,仍然可以使用熟悉的命令行界面。

安装 uv

安装 uv 非常简单,你可以通过多种方式获取它:

使用 curl 安装(推荐)

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

这种方式不需要预先安装 Rust 或 Python。

使用 pip 安装

pip install uv

安装完成后,你可以通过运行 uv --version 来验证安装是否成功。

基本使用

让我们从一些基本的 uv 命令开始,看看它如何替代传统的 Python 包管理工具。

安装包

使用 uv 安装包的语法与 pip 非常相似:

uv pip install requests

但速度要快得多。你也可以指定版本:

uv pip install requests==2.31.0

创建和使用虚拟环境

uv 可以轻松创建和管理虚拟环境:

uv venv

这将在当前目录下创建一个名为 .venv 的虚拟环境。你可以通过以下命令激活它:

# 在 Linux/macOS 上
source .venv/bin/activate

# 在 Windows 上
.venv\Scripts\activate

从 requirements.txt 安装依赖

如果你有一个 requirements.txt 文件,可以使用以下命令安装所有依赖:

uv pip sync requirements.txt

sync 命令确保你的环境与 requirements.txt 完全匹配,它会安装缺失的包并移除多余的包。

Python 版本管理

uv 的一个强大功能是它能够安装和管理 Python 版本,无需额外的工具。

安装最新的 Python 版本

uv python install

安装特定的 Python 版本

uv python install 3.12

使用特定的 Python 版本运行脚本

uv run --python 3.12 script.py

值得注意的是,uv 安装的 Python 版本不会全局可用(即通过 python 命令),但你可以通过 uv run 或创建并激活虚拟环境来使用它们。

脚本运行与依赖管理

uv 提供了一种优雅的方式来运行 Python 脚本并管理它们的依赖。

运行没有依赖的脚本

uv run script.py

运行带有依赖的脚本

对于需要外部依赖的脚本,你可以使用 --with 参数:

uv run --with requests script.py

这会自动创建一个临时环境,安装 requests 包,然后运行脚本。

在脚本中声明依赖

更优雅的方式是在脚本中直接声明依赖。uv 支持在脚本顶部使用特殊注释来声明依赖:

# uv: requests pandas
import requests
import pandas as pd

# 脚本代码...

然后,你只需要简单地运行:

uv run script.py

uv 会自动检测并安装声明的依赖。这种方式特别适合单文件脚本,让你无需手动管理环境。

工具运行与安装

uv 提供了 uvx 命令,让你可以轻松运行 Python 工具而无需安装它们。

运行工具而不安装

uvx ruff check .

这会临时安装 ruff 并运行它,完成后不会留下任何痕迹。

安装工具供全局使用

如果你想安装工具以便随时使用,可以使用:

uv tool install ruff

安装后,你可以直接使用该工具:

ruff check .

升级已安装的工具

uv tool upgrade ruff

项目管理

uv 对 Python 项目提供了全面的支持,让你可以轻松创建、管理和构建项目。

创建新项目

uv init my-project
cd my-project

这会创建一个基本的项目结构,包括 pyproject.toml 文件。

添加项目依赖

uv add requests

这会将 requests 添加到你的项目依赖中,并更新锁文件。

安装项目依赖

uv sync

这会根据锁文件安装所有项目依赖。

构建项目分发包

uv build

这会构建源代码分发包和轮子分发包,放在 dist/ 目录下。

发布项目到 PyPI

uv publish

这会将构建好的分发包上传到 PyPI。你需要先设置 PyPI 凭证。

与其他工具集成

uv 可以与多种常用工具和平台集成:

  • Docker:在 Docker 镜像中使用 uv 可以显著加快构建速度
  • Jupyter:uv 可以用于管理 Jupyter 环境
  • pre-commit:将 uv 与 pre-commit 钩子集成
  • GitHub Actions:在 CI/CD 流程中使用 uv
  • GitLab CI/CD:在 GitLab 流水线中使用 uv
  • 替代包索引:使用 uv 与私有包索引
  • PyTorch:使用 uv 安装 PyTorch
  • FastAPI:使用 uv 构建 FastAPI 应用
  • AWS Lambda:在 Lambda 函数中使用 uv

实际案例:构建一个简单的 Web 应用

让我们通过一个实际案例来看看 uv 如何简化开发流程。假设我们要创建一个简单的 Flask 应用:

  1. 创建项目:
uv init flask-app
cd flask-app
  1. 添加依赖:
uv add flask
  1. 创建应用文件 app.py:
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello from uv!"

if __name__ == '__main__':
    app.run(debug=True)
  1. 运行应用:
uv run app.py

就这么简单!uv 会自动处理依赖安装和环境管理,让你专注于代码开发。

结语

uv 代表了 Python 包管理的未来。它不仅速度惊人,还提供了全面的功能集,可以替代多个传统工具。通过统一的界面和一致的行为,uv 简化了 Python 开发流程,让你可以更专注于编写代码而不是管理环境。

无论你是初学者还是经验丰富的开发者,uv 都能为你的 Python 开发体验带来显著提升。它的速度优势在大型项目中尤为明显,而其简洁的界面和强大的功能则适合各种规模的项目。

如果你厌倦了等待依赖安装,或者被复杂的环境管理所困扰,不妨尝试一下 uv。它可能会成为你 Python 工具箱中最有价值的新成员。

开始使用 uv,体验闪电般速度的 Python 包管理吧!

准备开始了吗?

先简单说明目标,我会给出最合适的沟通方式。