Python UV:最快的 Python 包管理器终极指南

360影视 欧美动漫 2025-05-30 09:13 2

摘要:UV 是一款现代、高性能的 Python 包管理器和安装器,它使用 Rust 编写,可以作为传统 Python 包管理工具(如 pip)的直接替代品,显著提升了速度、可靠性和依赖项解析能力。

UV 是一款现代、高性能的 Python 包管理器和安装器,它使用 Rust 编写,可以作为传统 Python 包管理工具(如 pip)的直接替代品,显著提升了速度、可靠性和依赖项解析能力。

这款工具代表了新一代的 Python 包管理器,旨在解决 Python 生态系统中常见的痛点,例如安装速度慢、依赖冲突以及环境管理复杂等问题。UV 通过其创新的架构和高效的实现方式,速度比传统包管理器快 10 到 100 倍。

让 UV 独树一帜的关键特性包括:

闪电般的包安装和依赖项解析速度与现有的 Python 工具和工作流程兼容内置虚拟环境管理支持现代打包标准可靠的依赖锁定和可重现环境内存高效操作,尤其适用于大型项目

无论是从事小型个人项目还是管理大型 Python 应用程序,UV 都为包管理提供了一个强大而高效的解决方案。

在本教程中,我们将涵盖 UV 的所有基本方面,以便您能够立即开始使用它。

开发者在切换到新工具之前通常会问的第一个问题是:“它与我正在使用的工具相比如何?”在 Python 依赖项和项目管理领域,以下四种工具是最常见的:

PIPPoetryCondavirtualenv

让我们比较 UV 与这些工具,以帮助您在深入了解细节之前决定 UV 是否适合您的需求。

UV 与 PIP 和 virtualenv 的比较

PIP 和 virtualenv 一直是 Python 包管理和虚拟环境创建的传统工具。虽然它们能够完成任务,但 UV 提供了几个引人注目的优势:速度:UV 的 Rust 实现使其在包安装和依赖项解析方面比 PIP 快得多,通常可以在几秒钟内完成 PIP 需要几分钟的任务。集成环境管理:虽然 virtualenv 只负责环境创建,PIP 只负责包管理,但 UV 将这两种功能结合在一个工具中,简化了工作流程。

UV 完全兼容 PIP 的生态系统,同时解决了其关键限制。它可以使用相同的 requirements.txt 文件和包索引,使迁移无缝衔接。主要区别在于:

性能:UV 的并行下载和优化的依赖解析器使其在大型项目的包安装和依赖解析速度上比 PIP 快 10 到 100 倍。内存使用:在包安装和依赖解析过程中,UV 比 PIP 使用的内存要少得多。错误处理:当依赖项发生冲突时,UV 提供更清晰的错误消息和更好的冲突解决方式。可重现性:UV 的锁文件方法确保了在不同系统上的一致环境,而基本的 requirements.txt 文件无法保证这一点。

尽管 PIP 和 virtualenv 仍然是可行的选择,但 UV 的现代架构和集成功能使其成为寻求更好性能和更简化工作流程的开发者的有吸引力的替代品。能够在不破坏现有流程的情况下将 UV 逐步引入现有项目,使其特别适合希望逐步现代化 Python 开发工具链的团队。

UV 与 Conda 的比较

那些不使用 PIP 和 virtualenv 的人通常会转向 Conda,他们也有充分的理由:

Conda 提供了一个完整的包管理解决方案,不仅处理 Python 包,还处理系统级依赖项它在管理包含 NumPy、SciPy 和 TensorFlow 等包的复杂科学计算环境方面表现出色Conda 环境在不同操作系统之间更具隔离性和可重现性它内置支持不同 Python 版本,并可以轻松切换Anaconda 发行版预装了许多科学计算包,为数据科学家提供了便利

但即使是 Conda 的忠实用户也应该考虑切换到 UV,原因有很多。UV 的闪电般快速的包安装和依赖解析能力可以显著加快环境设置的速度,与 Conda 有时缓慢的性能相比优势明显。它的最小资源占用意味着更少的内存使用和更快的启动速度。UV 还与现有的 Python 打包标准和工具无缝集成,使其更容易与更广泛的 Python 生态系统协同工作。对于那些不需要 Conda 的非 Python 包管理功能的项目,UV 提供了一个更简化、高效的解决方案,可以显著改善开发工作流程。

UV 与 Poetry 的比较

我曾经是 Conda 用户,将近三年时间,但在尝试了几次 Poetry 后,我就再也没有碰过 Conda 了。当我刚刚开始习惯 Poetry 时,我发现了 UV,它似乎承诺了与 Poetry 几乎相同的功能:

依赖管理:这两种工具都能有效地处理包依赖和虚拟环境项目结构:两者都提供了初始化和构建 Python 项目的工具锁文件:两者都生成锁文件以确保环境可重现包发布:两者都支持将包发布到 PyPI现代工具:两者都代表了现代的 Python 项目管理方法

然而,UV 的定义特征是其超快的速度和最小的资源占用。虽然 Poetry 比传统工具有了显著改进,但 UV 因其 Rust 实现而将性能提升到了另一个层次。此外,UV 与现有 Python 打包标准的兼容性意味着它可以与其他工具(如 pip)一起工作,而 Poetry 更具意见性的方法有时可能会缺乏这种灵活性。

三、安装 UV

可以在 macOS 和 Linux 上通过 cURL 系统级安装 UV:

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

详细解释如下:

curl -LsSf https://astral.sh/uv/install.sh: 从astral.sh网站下载uv的安装脚本

-L: 跟随重定向

-s: 静默模式,不显示进度或错误信息

-S: 在静默模式下仍然显示错误

-f: 连接失败时不显示HTTP错误

|: 管道,将前一个命令的输出传递给后一个命令

sudo sh: 使用root权限执行下载的安装脚本

总的来说,这条命令会以管理员权限下载并执行uv包管理器的安装脚本,在系统上安装uv工具。

在 Windows 上可以通过 Powershell 安装(确保以管理员权限运行 Powershell):

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

UV 也可以通过 Homebrew 安装:

$ brew install uv

安装完成后,显示如下提示信息:

To add $HOME/.local/bin to your PATH, either restart your shell or run: source $HOME/.local/bin/env (sh, bash, zsh) source $HOME/.local/bin/env.fish (fish)

需要将 $HOME/.local/bin 目录添加到系统的 PATH 环境变量中,以便可以直接运行该目录下的可执行文件。

$ source $HOME/.local/bin/env

这条命令用于在 shell 环境(sh、bash 或 zsh)中加载和执行位于用户主目录下 .local/bin/env 的环境配置文件。

安装完成后,可以通过运行 uv version 来验证安装:

$ uv version

输出版本信息:uv 0.6.16 (d8ad9d3cd 2025-04-22)

在本节中,我们将介绍如何从零开始使用 UV 创建一个项目。

项目是 UV 体验的核心部分。你可以通过 uv init 命令初始化一个空项目:

$ uv init explore-uv

进入该项目:cd explore-uv

执行命令:tree -a 是一个命令行工具,用于以树形结构显示目录内容。-a 表示显示所有文件,包括隐藏文件(以 . 开头的文件/目录)。

Git 会自动初始化,并生成与 Git 相关的文件,如 .gitignore 和一个空的 README.md。.python-version 文件中包含项目使用的 Python 版本,而 pyproject.toml 是项目元数据和依赖项的主要配置文件。

UV 将环境创建和依赖项安装合并为一个命令——uv add:

uv add scikit-learn xgboost

Using CPython 3.9.6 interpreter at: /Library/Developer/CommandLineTools/usr/bin/python3Creating virtual environment at: .venvResolved 11 packages in 49.14sPrepared 6 packages in 4m 02sInstalled 6 packages in 68ms+ joblib==1.4.2+ numpy==2.0.2+ scikit-learn==1.6.1+ scipy==1.13.1+ threadpoolctl==3.6.0+ xgboost==2.1.4

每次运行 add 命令后,UV 还会自动更新 pyproject.toml 和 uv.lock 文件。安装 Scikit-learn 和 XGBoost 后,TOML 文件的内容如下:

[project]name = "explore-uv"version = "0.1.0"description = "Add your description here"readme = "README.md"requires-python = ">=3.9"dependencies = [ "scikit-learn>=1.6.1", "xgboost>=2.1.4",]

如果需要从环境中移除某个依赖项及其子依赖项,可以使用 uv remove 命令。它会从虚拟环境中卸载该包,并从 pyproject.toml 文件中删除相关条目:

uv remove scikit-learn

安装完必要的依赖项后,就可以像往常一样开始编写 Python 脚本了。UV 提供了几种运行 Python 代码的方式:

可以直接使用 uv run 命令运行 Python 脚本,而不是通常的 python script.py 语法:

$ uv run main.py

输出:Hello from explore-uv!

run 命令会确保脚本在 UV 为项目创建的虚拟环境中运行。

管理 Python 版本是依赖管理的关键部分。UV 提供了简单易用的命令来控制使用的 Python 版本。让我们来看看如何使用 uv python 命令。

列出已安装的 Python 版本

由于系统通常已经安装了 Python,UV 默认可以检测到这些现有的安装版本。例如,要列出 UV 在你的系统上检测到的所有 Python 版本,可以运行以下命令:

$ uv python list --only-installed

输出:cpython-3.9.6-macos-x86_64-none /usr/bin/python3

如果激活之前通过 conda 安装的python版本,也可以检测:

conda activate p312-env

uv python list --only-installed

输出:

cpython-3.12.0-macos-x86_64-none opt/anaconda3/envs/p312-env/bin/python3.12cpython-3.12.0-macos-x86_64-none opt/anaconda3/envs/p312-env/bin/python3 -> python3.12cpython-3.12.0-macos-x86_64-none opt/anaconda3/envs/p312-env/bin/python -> python3.12cpython-3.9.6-macos-x86_64-none /usr/bin/python3

来源:架构笔记一点号

相关推荐