UV 是一款现代、高性能的 Python 包管理器和安装器,它使用 Rust 编写,可以作为传统 Python 包管理工具(如 pip)的直接替代品,显著提升了速度、可靠性和依赖项解析能力。
这款工具代表了新一代的 Python 包管理器,旨在解决 Python 生态系统中常见的痛点,例如安装速度慢、依赖冲突以及环境管理复杂等问题。UV 通过其创新的架构和高效的实现方式,速度比传统包管理器快 10 到 100 倍。
让 UV 独树一帜的关键特性包括:
无论是从事小型个人项目还是管理大型 Python 应用程序,UV 都为包管理提供了一个强大而高效的解决方案。
在本教程中,我们将涵盖 UV 的所有基本方面,以便您能够立即开始使用它。
开发者在切换到新工具之前通常会问的第一个问题是:“它与我正在使用的工具相比如何?”在 Python 依赖项和项目管理领域,以下四种工具是最常见的:
让我们比较 UV 与这些工具,以帮助您在深入了解细节之前决定 UV 是否适合您的需求。
UV 与 PIP 和 virtualenv 的比较
UV 完全兼容 PIP 的生态系统,同时解决了其关键限制。它可以使用相同的 requirements.txt 文件和包索引,使迁移无缝衔接。主要区别在于:
尽管 PIP 和 virtualenv 仍然是可行的选择,但 UV 的现代架构和集成功能使其成为寻求更好性能和更简化工作流程的开发者的有吸引力的替代品。能够在不破坏现有流程的情况下将 UV 逐步引入现有项目,使其特别适合希望逐步现代化 Python 开发工具链的团队。
UV 与 Conda 的比较
那些不使用 PIP 和 virtualenv 的人通常会转向 Conda,他们也有充分的理由:
但即使是 Conda 的忠实用户也应该考虑切换到 UV,原因有很多。UV 的闪电般快速的包安装和依赖解析能力可以显著加快环境设置的速度,与 Conda 有时缓慢的性能相比优势明显。它的最小资源占用意味着更少的内存使用和更快的启动速度。UV 还与现有的 Python 打包标准和工具无缝集成,使其更容易与更广泛的 Python 生态系统协同工作。对于那些不需要 Conda 的非 Python 包管理功能的项目,UV 提供了一个更简化、高效的解决方案,可以显著改善开发工作流程。
UV 与 Poetry 的比较
我曾经是 Conda 用户,将近三年时间,但在尝试了几次 Poetry 后,我就再也没有碰过 Conda 了。当我刚刚开始习惯 Poetry 时,我发现了 UV,它似乎承诺了与 Poetry 几乎相同的功能:
然而,UV 的定义特征是其超快的速度和最小的资源占用。虽然 Poetry 比传统工具有了显著改进,但 UV 因其 Rust 实现而将性能提升到了另一个层次。此外,UV 与现有 Python 打包标准的兼容性意味着它可以与其他工具(如 pip)一起工作,而 Poetry 更具意见性的方法有时可能会缺乏这种灵活性。
可以在 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/python3
Creating virtual environment at: .venv
Resolved 11 packages in 49.14s
Prepared 6 packages in 4m 02s
Installed 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
#春日生活打卡季#
更新时间:2025-04-29
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-=date("Y",time());?> All Rights Reserved. Powered By bs178.com 闽ICP备11008920号
闽公网安备35020302034844号