论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
Rust 开辟的高性能 Python 包管理工具,可替换 pip、pip ...
Rust 开辟的高性能 Python 包管理工具,可替换 pip、pip-tools 和 virtuale ...
自由的羽毛
金牌会员
|
2024-5-13 01:54:08
|
显示全部楼层
|
阅读模式
楼主
主题
926
|
帖子
926
|
积分
2778
最近,我在
Python 潮流周刊
中分享了一个超等火爆的项目,这还不到一个月,它在 Github 上已经拿下了 8K star 的亮眼结果,可见其受接待水平极高!国内还未见有更多消息,我趁着周末把一篇官方博客翻译出来了,分享给大家。
作者:
@charliermarsh
译者:豌豆花下猫@Python猫
英文:uv: Python packaging in Rust (
https://astral.sh/blog/uv
)
声明:本翻译是出于交换学习的目的,为便于阅读,部分内容略有改动。转载请保留作者信息。
摘要
uv
是一个极其快速的 Python 包安装器和剖析器,用 Rust 编写,旨在作为 pip 和 pip-tools 工作流的替代品。
它代表了我们追求“Python 的 Cargo”的里程碑:一个全面、快速、可靠且易于使用的 Python 项目和包管理器。
作为此次发布的一部分,我们还将接受 Rye,这是 Armin Ronacher 开辟的一个实行性 Python 打包工具。我们将维护它,直到我们将 uv 扩展成统一的后继项目,以实现我们对 Python 打包的共同愿景。
在 Astral,我们为 Python 生态系统构建高性能的开辟工具。我们最着名的是
Ruff
,一个极其快速的 Python linter 和格式化工具。(译注:对 Ruff 的先容
性能最快的代码分析工具,Ruff 正在席卷 Python 圈!
)
本日,我们发布了 Astral 工具链中的下一个工具:uv,一个用 Rust 开辟的高性能的 Python 包剖析器和安装器。
图注:使用热缓存来剖析(左)和安装(右)Trio 依赖项,以模拟重新创建虚拟环境或向现有项目添加依赖项
uv 旨在作为 pip、pip-tools 和 virtualenv 的直接替代品,现在就可以用于生产环境中那些围绕这些工作流构建的项目。
产品原则
与 Ruff 一样,uv 的实现也遵照我们的焦点产品原则:
痴迷于高性能
在上述基准测试中,uv 在没有缓存的情况下比 pip 和 pip-tools 快 8-10 倍,而在有热缓存的情况下(比方,重新创建虚拟环境或更新依赖项),则快 80-115 倍。
uv 使用全局模块缓存来避免重新下载和构建依赖项,并在支持的文件系统上利用 Copy-on-Write 和硬链接来最小化磁盘空间使用。
优化以便于接纳
只管我们对 Python 打包的将来有着宏大的愿景,但 uv 的初始版本聚焦于支持我们 uv pip 接口背后的 pip 和 pip-tools,使其可以零配置地被现有项目所接纳。
相似地,uv 可以“仅仅”当作一个剖析器(uv pip compile 锁定你的依赖项),“仅仅”当作一个虚拟环境创建器(uv venv),“仅仅”当作一个包安装器(uv pip sync),等等。它既是统一的,又是模块化的。
简化的工具链
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 索引进行了大规模测试。
本文首发于 Python猫,博客:
https://pythoncat.top/posts/2024-03-05-uv
即插即用的兼容性 API
这个初始版本主要实现了 uv 的pip 命令。对于使用过 pip 和 pip-tools 的人来说,这将会很熟悉:
类似于pip install,运行uv pip install ,可从命令行、requirements 文件或 pyproject.toml 来安装 Python 依赖项
类似于pip-compile,运行uv pip compile 来天生锁定的 requirements.txt
类似于pip-sync,运行uv pip sync 来同步带有锁定的 requirements.txt 的虚拟环境
通过将这些“低级”命令放在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 支持替换剖析策略。
默认情况下,uv 遵照尺度的 Python 依赖剖析策略,即优先选择每个包的最新兼容版本。但通过传入--resolution=lowest,库作者可以测试他们的包与依赖项的最低兼容版本。(这类似于 Go 的最小版本选择。)
uv 允许针对恣意 Python 目标版本进行剖析。
pip 和 pip-tools 默认针对当前安装的 Python 版本进行剖析(比方,在 Python 3.12 下运行,将天生兼容于 Python 3.12 的剖析),uv 支持--python-version 参数,使你可以或许在运行较新版本的情况下,天生兼容较低版本(比方 Python 3.7)的剖析。
uv 允许依赖项“覆盖”。
uv 通过覆盖(-o overrides.txt)将 pip 的“束缚”概念向前推了一步,允许用户通过覆盖包的声明依赖项来引导剖析器。覆盖为用户提供了一个逃生舱口,用于解决错误的上限和其他错误声明的依赖项。
在当前形式下,uv 并不适合所有项目。pip 是一个成熟且稳定的工具,支持非常广泛的场景,并且专注于兼容性。虽然 uv 支持 pip 的大部分功能,但它缺乏对一些传统特性的支持,比如 .egg 分发。
同样,uv 目前还不支持天生与平台无关的锁定文件。这与 pip-tools 相符,但与 Poetry 和 PDM 差别,这使得 uv 更适合围绕 pip 和 pip-tools 工作流构建的项目。
对于那些深入打包生态系统的人来说,uv 还用 Rust 实现了符合尺度的更多功能,比方 PEP 440(版本标识符)、PEP 508(依赖项说明符)、PEP 517(与构建系统无关的构建前端)、PEP 405(虚拟环境)等。
"
ython 的 Cargo":uv 和 Rye
uv 代表着我们追求 "
ython 的 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 发展成一个生产就绪的 "
ython 的 Cargo",并在得当的时间提供一个将 Rye 平滑迁移到 uv 的路径。
在此之前,我们将维护 Rye,将其迁移成在幕后使用 uv,宽泛地说,它将成为我们正在构建的最终用户体验的实行性测试床。
虽然归并项目带来了一些挑战,但我们致力于在 Astral 的旗帜下构建一个单一的且统一的工具,并在我们发展 uv 成为一个合适且全面的继任者的同时,支持现有的 Rye 用户。
我们的门路图
在此次发布之后,我们的首要任务是支持好那些在考察 uv 的用户,重点是进步跨平台的兼容性、性能和稳定性。
然后,我们将着手把 uv 扩展为一个完整的 Python 项目与包的管理器:一个单一的二进制文件,为你提供使用 Python 进步生产力所需的一切。
我们对 uv 有一个雄心壮志的门路图。但在当下,我以为它对 Python 来说,感觉像是提供了一种非常差别的体验。我希望你们能实行一下。
致谢
最后,我们要感谢所有直接或间接为 uv 的开辟做出贡献的人。此中最紧张的是
pubgrub-rs
的维护者 Jacob Finkelman 和 Matthieu Pizenberg。uv 使用了 PubGrub 作为其底层版本剖析器,我们感谢 Jacob 和 Matthieu 在已往对 PubGrub 所做的工作,以及他们作为合作者对整个项目的关键助力。
我们还要感谢那些启发了我们的打包项目,尤其是 Cargo,以及来自 JavaScript 生态的 Bun、Orogene 和 pnpm,以及来自 Python 生态的 Posy、Monotrail 和 Rye。特别感谢 Armin Ronacher 与我们合作完成这项工作。
最后,我们还要感谢 pip 的维护者们以及更广泛的 PyPA 的成员,感谢他们为使 Python 打包成为可能所做的所有工作。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
自由的羽毛
金牌会员
这个人很懒什么都没写!
楼主热帖
JDBC p2 JDBC API
【MySQL】MySQL的安装、卸载、配置、登 ...
iOS 组件化及二进制化的探索 ...
Vue使用ajax(axios)请求后台数据 ...
线程本地存储 ThreadLocal
.MD语法入门,教你写好readme文档 ...
【python】标准库(第四讲)
go学习笔记(一)
Linux【实操篇】—— Shell函数、Shell ...
单元测试、反射、注解、动态代理 ...
标签云
存储
服务器
快速回复
返回顶部
返回列表