Python 的发展与包管理的进步密切相关,从手动安装到 pip 和 Poetry 等工具。然而,随着项目变得越来越复杂,传统工具往往在速度和效率上出现不足。
uv 是一个用 Rust 构建的尖端 Python 包和项目管理器,旨在改变这一现状。 uv 结合了 pip、poetry 和 virtualenv 等工具的功能,简化了依赖管理、脚本执行和项目构建等任务,所有这些都具有卓越的性能。它与 pip 命令无缝兼容,无需额外的学习曲线。
在本教程中,我们将探索如何安装 uv 并充分利用其功能。从设置项目和管理依赖项到运行脚本和利用其增强的 pip 界面。
Pip 是一个广泛使用的用 Python 编写的包管理系统,旨在安装和管理软件包。然而,尽管它很受欢迎,但它经常被批评为最慢的 Python 包管理工具之一。关于“pip install 速度慢”的投诉非常常见,以至于经常出现在开发者论坛和主题中。
pip 的一个显着缺点是它容易受到依赖气味的影响,当依赖配置文件编写或维护不当时就会出现这种情况。这些问题可能会导致严重的后果,例如项目的复杂性增加和可维护性降低。
pip 的另一个限制是它在恢复运行时环境时无法一致地准确匹配 Python 代码。这种不匹配可能会导致依赖推断的成功率较低,从而使可靠地重新创建项目环境变得困难。
uv 是一个现代的、高性能的 Python 包管理器,由 ruff 的创建者开发并用 Rust 编写。它被设计为 pip 和 pip-tools 的直接替代品,提供卓越的速度以及与现有工具的兼容性。
主要功能包括支持可编辑安装、Git 和 URL 依赖项、约束文件、自定义索引等。 uv 符合标准的虚拟环境可与其他工具无缝协作,避免锁定或定制。它是跨平台的,支持 Linux、Windows 和 macOS,并且已经针对 PyPI 索引进行了广泛的测试。
uv 专注于简单性、速度和可靠性,解决了常见的开发人员痛点,如安装缓慢、版本冲突和复杂的依赖管理,为现代 Python 开发提供了直观的解决方案。
来源:https://blog.kusho.ai/uv-pip-killer-or-yet-another-package-manager
使用热缓存解析(左)和安装(右)依赖项,模拟重新创建虚拟环境或向现有项目添加新依赖项的过程。
来源:https://blog.kusho.ai/uv-pip-killer-or-yet-another-package-manager
使用冷缓存解析(左)和安装(右)依赖项模拟干净环境中的执行。在没有缓存的情况下,uv 比 pip 和 pip-tools 快 8-10 倍,而在使用热缓存的情况下,它的速度可以快 80-115 倍。
来源:https://blog.kusho.ai/uv-pip-killer-or-yet-another-package-manager
使用(左)和不使用(右)种子包(例如 pip 和 setuptools)创建虚拟环境。 uv 比 python -m venv 快大约 80 倍,比 virtualenv 快 7 倍,同时独立于 Python 运行。
安装 uv 快速而简单。您可以选择独立安装程序或直接从 PyPI 安装。
# On macOS and Linux. curl -LsSf https://astral.sh/uv/install.sh | sh # On Windows. powershell -c "irm https://astral.sh/uv/install.ps1 | iex" # With pip. pip install uv # With pipx. pipx install uv # With Homebrew. brew install uv # With Pacman. pacman -S uv
在使用uv之前,我们必须将uv路径添加到环境变量中。
对于 Linux 和 macOS,请在终端中使用以下命令修改 PATH 环境变量:
export PATH="$HOME/.local/bin:$PATH"
对于 Windows,要将目录添加到 Windows 上的用户和系统的 PATH 环境变量中,请在搜索面板中搜索环境变量。在“用户变量”/“系统变量”下,选择“路径”变量,单击“编辑”,然后单击“新建”并添加所需的路径。
%USERPROFILE%\.local\bin
安装完成后,在终端运行uv命令,验证是否安装正确。
使用 uv 创建虚拟环境简单明了。使用以下命令以及您所需的环境名称来创建它。
uv venv
# On macOS and Linux. source .venv/bin/activate # On Windows. .venv\Scripts\activate
将软件包安装到虚拟环境中遵循熟悉的过程。下面给出各种安装方法
uv pip install flask # Install Flask. uv pip install -r requirements.txt # Install from a requirements.txt file. uv pip install -e . # Install current project in editable mode. uv pip install "package @ ." # Install current project from disk uv pip install "flask[dotenv]" # Install Flask with "dotenv" extra.
要将锁定的依赖项与虚拟环境同步,请使用以下命令:
uv pip sync requirements.txt # Install dependencies from a requirements.txt file.
uv 支持与现有工具类似的各种命令行参数,包括 -rrequirements.txt、-cconstraints.txt、-e .、--index-url 等。
让我们用 uv 探索一些与项目相关的命令。首先初始化一个名为“sample-project”的 Python 项目。
# On macOS and Linux. curl -LsSf https://astral.sh/uv/install.sh | sh # On Windows. powershell -c "irm https://astral.sh/uv/install.ps1 | iex" # With pip. pip install uv # With pipx. pipx install uv # With Homebrew. brew install uv # With Pacman. pacman -S uv
导航到示例项目目录。 uv 使用 app.py、requirements.txt、README.md 等基本文件初始化项目。
使用run命令执行示例Python文件。此过程首先创建虚拟环境文件夹,然后运行 Python 文件。
export PATH="$HOME/.local/bin:$PATH"
将 Flask 添加到您的项目依赖项中。
%USERPROFILE%\.local\bin
新建一个并编写以下代码。
uv venv
使用 uv run 命令来执行应用程序。
# On macOS and Linux. source .venv/bin/activate # On Windows. .venv\Scripts\activate
打开浏览器或使用curl或Postman等工具发送GET请求。
使用 uv 安装 Python 是可选的,因为它可以与现有的 Python 安装无缝协作。但是,如果首选通过 uv 安装 Python,则可以使用简单的命令来完成:
uv pip install flask # Install Flask. uv pip install -r requirements.txt # Install from a requirements.txt file. uv pip install -e . # Install current project in editable mode. uv pip install "package @ ." # Install current project from disk uv pip install "flask[dotenv]" # Install Flask with "dotenv" extra.
与传统方法相比,这种方法通常更方便、更可靠,因为它避免了管理存储库或下载安装程序的需要。只需执行命令,设置即可使用。
CLI 工具可以通过 uv 命令安装和使用。例如,可以安装 Huggingface_hub 工具来将文件拉取和推送到 Hugging Face 存储库。
uv pip sync requirements.txt # Install dependencies from a requirements.txt file.
uv init sample-project
这是使用 uv 执行常见操作的快速备忘单:
尽管 uv 为 Python 包管理提供了快速高效的解决方案,但它也有一些局限性:
感谢您阅读这篇文章!!
感谢 Gowri M Bhatt 审阅内容。
如果您喜欢这篇文章,请点击心形按钮♥并分享以帮助其他人找到它!
uv - 一个非常快的 Python 包和项目管理器,用 Rust 编写 | docs.astral.sh
以上是uv 简介:下一代 Python 包管理器的详细内容。更多信息请关注PHP中文网其他相关文章!