文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

用 Rust 开发的 Python 包管理工具,可替换 pip、pip-tools 和 virtualenv

2024-11-30 01:29

关注

今天,我们发布了 Astral 工具链中的下一个工具:uv,一个用 Rust 开发的高性能的 Python 包解析器和安装器。

图片

图注:使用热缓存来解析(左)和安装(右)Trio 依赖项,以模拟重新创建虚拟环境或向现有项目添加依赖项

uv 旨在作为 pip、pip-tools 和 virtualenv 的直接替代品,现在就可以用于生产环境中那些围绕这些工作流构建的项目。

产品原则

与 Ruff 一样,uv 的实现也遵循我们的核心产品原则:

  1. 痴迷于高性能

在上述基准测试中,uv 在没有缓存的情况下比 pip 和 pip-tools 快 8-10 倍,而在有热缓存的情况下(例如,重新创建虚拟环境或更新依赖项),则快 80-115 倍。

uv 使用全局模块缓存来避免重新下载和构建依赖项,并在支持的文件系统上利用 Copy-on-Write 和硬链接来最小化磁盘空间使用。

  1. 优化以便于采用

尽管我们对 Python 打包的未来有着宏大的愿景,但 uv 的初始版本聚焦于支持我们 uv pip 接口背后的 pip 和 pip-tools,使其可以零配置地被现有项目所采用。

相似地,uv 可以“仅仅”当作一个解析器(uv pip compile 锁定你的依赖项),“仅仅”当作一个虚拟环境创建器(uv venv),“仅仅”当作一个包安装器(uv pip sync),等等。它既是统一的,又是模块化的。

  1. 简化的工具链

uv 作为一个单一的静态二进制文件发布,能够替代 pip、pip-tools 和 virtualenv。uv 没有直接的 Python 依赖,因此你可以跟 Python 本身分别安装,避免了在多个 Python 版本(例如,pip vs. pip3 vs. pip3.7)之间选择 pip 安装程序。

安装使用

虽然 uv 将演变成一个完整的 Python 项目和包管理器(“Cargo for Python”),但像pip-tools 这样较狭窄的聚焦范围,让我们得以解决构建此类工具所涉及的低级问题(如包安装),同时立即提供有用的东西,最小化社区的使用障碍。

你可以通过我们的独立安装程序安装 uv,或者从 PyPI 安装。

使用 curl:

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

对 Windows:

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

使用 pip 或 pipx:

pip install uv
pipx install uv

uv 能满足你对现代 Python 打包工具的所有期望:可编辑安装、Git 依赖项、URL 依赖项、本地依赖项、约束文件、源码分发、自定义索引等,所有这些都设计成与你现有的工具无缝兼容。

uv 支持 Linux、Windows 和 macOS,并已针对公共的 PyPI 索引进行了大规模测试。

即插即用的兼容性 API

这个初始版本主要实现了 uv 的pip 命令。对于使用过 pip 和 pip-tools 的人来说,这将会很熟悉:

通过将这些“低级”命令放在uv pip下,我们在 CLI 中预留了空间,用于我们打算在未来发布的更“有主见”的项目管理 API,它看起来将更像 Rye、Cargo 或 Poetry。(想象一下 uv run 、uv build 等等)

uv 也可以通过uv venv 作为虚拟环境管理器使用。它比python -m venv 快大约 80 倍,比virtualenv 快 7 倍,且不依赖于 Python。

图片

图注:创建一个虚拟环境,有(左)和没有(右)pip 及 setuptools 种子包

uv 的虚拟环境符合标准,可以与其他工具互换使用——没有锁定机制或定制。

新功能

从头开始构建我们自己的包管理工具栈,这还为新功能开辟了空间。例如:

在当前形式下,uv 并不适合所有项目。pip 是一个成熟且稳定的工具,支持非常广泛的场景,并且专注于兼容性。虽然 uv 支持 pip 的大部分功能,但它缺乏对一些传统特性的支持,比如 .egg 分发。

同样,uv 目前还不支持生成与平台无关的锁定文件。这与 pip-tools 相符,但与 Poetry 和 PDM 不同,这使得 uv 更适合围绕 pip 和 pip-tools 工作流构建的项目。

对于那些深入打包生态系统的人来说,uv 还用 Rust 实现了符合标准的更多功能,例如 PEP 440(版本标识符)、PEP 508(依赖项说明符)、PEP 517(与构建系统无关的构建前端)、PEP 405(虚拟环境)等。

"Python 的 Cargo":uv 和 Rye

uv 代表着我们追求 "Python 的 Cargo" 的一个中间里程碑:一个统一的 Python 包和项目管理器,它极其快速、可靠且易于使用。

想象一下:一个单一的二进制文件,它可为你安装 Python,并为你提供使用 Python 所需的一切,不仅包括 pip、pip-tools 和 virtualenv,还有 pipx、tox、poetry、pyenv、ruff 等等。

使用 Python 工具链可能是一种低信心体验:为新项目或现有项目搭建环境需要大量的工作,而且命令通常以令人费解的方式报错。相比之下,在 Rust 生态中做事时,你信任工具会成功。Astral 工具链的目标是将 Python 从低信心体验转变为高信心体验。

我们对 Python 打包的愿景与 Rye 的愿景相去不远,Rye 是由 Armin Ronacher 开发的一个实验性的项目与包管理工具。

在与 Armin 的交流中,我们清楚地认识到我们的愿景非常接近,但实现这些愿景需要在基础工具上作大量投入。例如:构建这样的工具需要一个非常快速的、端到端集成的、跨平台的解析器和安装器。在 uv 里,我们已经构建出了这样的基础工具。

我们认为这是一个难得的合作机会,可以避免 Python 生态破碎。因此,我们与 Armin 合作,很高兴地接管了 Rye。 我们的目标是将 uv 发展成一个生产就绪的 "Python 的 Cargo",并在适当的时候提供一个将 Rye 平滑迁移到 uv 的路径。

在此之前,我们将维护 Rye,将其迁移成在幕后使用 uv,宽泛地说,它将成为我们正在构建的最终用户体验的实验性测试床。

虽然合并项目带来了一些挑战,但我们致力于在 Astral 的旗帜下构建一个单一的且统一的工具,并在我们发展 uv 成为一个合适且全面的继任者的同时,支持现有的 Rye 用户。

最近,我在 Python 潮流周刊 中分享了一个超级火爆的项目,这还不到一个月,它在 Github 上已经拿下了 8K star 的亮眼成绩,可见其受欢迎程度极高!国内还未见有更多消息,我趁着周末把一篇官方博客翻译出来了,分享给大家。

作者:@charliermarsh

译者:豌豆花下猫@Python猫

英文:uv: Python packaging in Rust (https://astral.sh/blog/uv)

声明:本翻译是出于交流学习的目的,为便于阅读,部分内容略有改动。转载请保留作者信息。

来源:Python猫内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯