Rye:一个实验性质的Python包管理系统

作者:YunfengWang

来源:https://vra.github.io/2023/05/17/rye-intro

Rye[1] 是 Flask 的作者 Armin Ronacher[2] 最近推出的一个实验性质的 Python 包管理系统,目的是解决 Python 包管理目前面临的工具链碎片化的问题。

大家知道,Python 目前的包管理系统很多,包括 poetry、pip、pipenv、pyenv、venv、virtualenv、pdm、hatch 等等,它们都是优秀的工具,提出时都是解决了一定的问题,但没有哪个工具能够做到主流,因此也增加了系统的碎片化程度。

另一方面,conda 等工具能提供不同版本的 Python,管理不同的环境,但每个环境的 Python 不是共享的,环境创建一多,环境目录就变得很大,且内部机制很不透明,有时也会遇到冲突没法解决的问题。

另一方面,Python 在 Linux/macOS 上的安装也面临一些问题,例如用包管理器安装的 Python 和用户手动安装的 Python 有的时候会混淆,导致一些混乱,例如在 Fedora 上,用 pip install 安装包可能会导致系统的包管理命令 dnf 出错。PEP 668[3] 尝试对这些问题给出一个解决方案,但也需要不同的系统来支持,目前看还任重道远。

由于 Armin 也是一个 Rust 开发者,而 Rust 基于标准化的 rustup 和 cargo 两个工具,配合配置文件来进行包管理,目前做的比较好,没有 Python 面临的碎片化问题。受 Rust 的启发,作者提出了 Rye,并且期望能够启发 Python 社区提出类似 Rust 的标准包管理工具。

具体来说,Rye 提出了一些解决这些问题的思路:

  • 提出一个 workspace 的概念,workspace 类似一个项目目录,或者一个 git 仓库,一个 workspace 下只有一个 Python 版本,不同 workspace Python 版本相互隔离,每个项目采用 pyproject.toml 来进行配置

  • 不使用系统自带的 Python,相反地,在每个项目目录的中下载一个 standalone 的 python,解决不同版本的冲突问题 + 不暴露 pip 命令,通过 rye add + rye sync 来管理包的依赖,避免包 A 和包 B 依赖不同版本的包 C 而导致的不兼容问题

  • 区分开发环境和正式环境,因为一些包在开发时会用到一些调试工具,但作为第三方库被引入的时候并不需要

  • 支持 import 本地 workspace 作为第三方库包

但同时也有一个问题&

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亘佰瑞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值