Skip to content

Python 包管理新星:uv 使用指南

Python 的包管理生态系统长期以来由 pipvenv 等工具主导。然而,随着项目复杂性的增加和对性能要求的提高,开发者社区一直在寻求更高效、更统一的解决方案。uv 是由 ruff 的开发团队 Astral 公司推出的一款用 Rust 编写的、速度极快的 Python 包安装器和解析器。它的出现旨在显著提升 Python 开发者的包管理和虚拟环境操作体验,有望成为 pipvenvvirtualenv 及其相关工作流的直接替代品。

为什么要使用 uv

uv 的核心优势在于其卓越的性能和统一的工具链。由于采用 Rust 编写并进行了大量优化,uv 在执行包安装、依赖解析和虚拟环境创建等任务时,速度远超传统的 Python 工具。根据官方基准测试和社区反馈,其速度提升可达数倍甚至数十倍,这对于大型项目或在 CI/CD 环境中尤其重要,能够大幅缩短等待时间。

除了速度,uv 将包安装(类似 pip)和虚拟环境管理(类似 venv/virtualenv)的功能整合到单一命令行工具中。这种集成简化了开发工作流,减少了开发者需要学习和使用的工具数量。它还内置了一个先进的依赖解析器,旨在提供快速且准确的依赖关系解决方案,减少版本冲突的可能性。

此外,uv 设计上兼容 pip 的许多命令和 requirements.txt 文件格式,使得现有项目可以相对平滑地迁移。它还采用了智能的全局缓存机制,避免重复下载包,进一步提升了安装效率。这些特性共同构成了 uv 吸引开发者的关键因素,使其成为一个值得尝试的现代化 Python 包管理工具。

如何安装 uv

安装 uv 非常便捷,支持多种操作系统。开发者可以根据自己的平台选择合适的安装方式。

在 macOS 和 Linux 系统上,推荐使用 curl 进行安装:

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

或者,也可以使用包管理器,如 Homebrew (macOS) 或 pipx

bash
# 使用 Homebrew
brew install uv

# 使用 pipx
pipx install uv

在 Windows 系统上,可以通过 PowerShell 安装:

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

或者同样使用 pipx

bash
pipx install uv

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

如何设置镜像

对于位于网络访问受限或希望加速下载的地区的开发者(例如中国大陆),配置 PyPI 镜像是常见的做法。uv 支持通过环境变量或配置文件来设置包索引 URL。

最常用的方法是设置环境变量 UV_INDEX_URL。例如,要使用清华大学的 PyPI 镜像,可以在 shell 配置文件(如 .bashrc, .zshrc)中添加:

bash
export UV_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple

或者,如果需要设置额外的索引 URL(例如私有仓库),可以使用 UV_EXTRA_INDEX_URL

bash
export UV_EXTRA_INDEX_URL=https://my-private-repo.org/simple

每次运行 uv 命令时,它将优先使用这些环境变量指定的镜像地址来查找和下载包。这种方式简单直接,易于配置。

常规用法

uv 的设计目标之一是作为 pipvenv 的替代品,因此其许多命令与 pip 类似,降低了学习成本。以下是一些常见的 uv 用法:

创建虚拟环境:使用 uv venv 命令可以在当前目录下创建一个名为 .venv 的虚拟环境,这与 python -m venv .venv 类似,但速度更快。

bash
uv venv

创建后,需要像往常一样手动激活环境(具体命令取决于操作系统和 shell,例如 source .venv/bin/activate)。

安装包:使用 uv pip install 命令安装 Python 包,其语法与 pip install 高度兼容。

bash
# 安装单个包
uv pip install requests

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

同步环境:uv pip sync 命令可以确保虚拟环境中的包与 requirements.txt 文件严格一致,它会安装缺失的包并移除文件中未列出的包。这对于确保环境的一致性非常有用。

bash
uv pip sync requirements.txt

查看已安装的包:使用 uv pip list 命令可以列出当前环境中已安装的包及其版本。

bash
uv pip list

生成依赖文件:使用 uv pip freeze 命令可以将当前环境中安装的包及其版本输出到标准输出,通常用于生成 requirements.txt 文件。

bash
uv pip freeze > requirements.txt

卸载包:使用 uv pip uninstall 命令卸载指定的包。

bash
uv pip uninstall requests

小结

uv 作为 Python 包管理领域的新秀,凭借其基于 Rust 的高性能、统一的命令行接口以及对现有工作流的良好兼容性,迅速获得了开发者的关注。它显著提升了包安装和环境管理的效率,简化了工具链,并提供了强大的依赖解析能力。虽然它仍然是一个相对较新的工具,但其发展势头强劲,有潜力成为未来 Python 开发的标准配置之一。对于追求效率和简洁性的 Python 开发者而言,uv 无疑是一个值得尝试和采用的工具。

参考资料