Rye:作者推出的实验性Python包管理系统Flask

作者:王云峰来源:https://vra.github.io/2023/05/17/rye-intro
Rye[1] Flask Ronacher [2] 最近推出了一个实验性的 Python 包管理系统,该系统解决了 Python 包管理目前遇到的工具链碎片问题。
众所周知,Python目前有很多包管理系统,包括poetry、pip、pipenv、pyenv、venv、virtualenv、pdm、hatch等。系统。所有这些都是优秀的工具,并且在被推荐时都解决了某些问题。但没有任何一种设备能够达到主流,从而增加了系统的碎片化。
另一方面,像conda这样的工具可以提供不同版本的Python并管理不同的环境,但每个环境中的Python并不共享。当创建多个环境时,环境库变得非常庞大,并且内部机制非常不透明。 ,有时我们会遇到无法解决的冲突。
另一方面,在Linux/macOS上安装Python也会遇到问题。例如,用包管理器安装的Python和用户手动安装的Python有时会混淆,造成一些混乱。例如,在Fedora上使用pip安装包可能会导致系统的dnf包管理命令出错。 PEP 668[3]试图为这些问题提供解决方案,但也需要不同的系统来支持。目前,我们还有很长的路要走。
因为Armin也是Rust开发者,而Rust基于标准化的rustup和cargo工具,配合配置文件进行包管理,目前表现比较好,不存在Python面临的碎片问题。受到 Rust 的启发,作者向Rye推荐了Rye,希望激励 Python 社区出现一个类似于 Rust 的标准包管理工具。
特别是Rye针对这些问题提出了一些想法:
- 他提出了工作空间的概念。工作区类似于项目库或 git 存储库。一个工作空间下只有一个Python版本,不同工作空间中的Python版本可以互相交互。隔离,所有项目设置
- 不使用系统自带的Python。相反,每个项目目录下下载一个独立的python,解决不同版本的冲突问题+不暴露pip与rye add+ryesync来管理包依赖关系,避免A包和B包C在其不同版本造成的不兼容问题版本
- 区分开发环境和正式环境,因为有些包在开发时会使用一些调试工具,但作为第三方库实现时则不需要这个
- 支持导入本地工作区第三方作为库包
但也有一个问题:rye会成为又一个无法成为主流的Python包管理系统吗? ,从而进一步加剧Python包管理的碎片化?作者也在考虑这个问题,所以他写了一篇讨论帖:Rye存在吗?[4]来讨论这个问题。同时,对于Rye的筹划初衷,这里也可以参考作者的思路[5]。
个人观点:Rye的出现给了Python社区解决现有问题的新思路。使用Rye一段时间后,我发现至少使用Python的独立版本是解决冲突的好方法。通过几个简单的命令就可以比较直观的解决版本管理的问题。我们认为Rye的上行空间大于下行空间,即上行空间大于碎片化的增加。
简而言之:无论是 PEP-668 将版本控制指定为系统还是 Python,无论是 Python 解释器二进制文件单独分发的 PEP 711[6],还是Rye的出现,Python 社区都知道 Python 带包管理。问题的严重性然后做了一些有用的实验。希望未来有更多标准化的工具,让Python开发变得更容易。
下面简单介绍一下Rye的安装和使用。
安装rustup
Rye 是基于 Rust 开发的,Rust 标准包包含大量安装工具。 Rust编译器和cargo都需要安装rustup,所以要安装预编译的Rye包,需要先安装rustup:
curl --proto '=https' --tlsv -sSf https://sh .rustup.rs | sh
执行后,重新启动Shell并指定payload -V。如果不报错就说明安装成功。安装Rye 是否安装Rye成功。 。
同时,你可以将 $HOME/.rye/shims 添加到 PATH 环境变量中,这样当你打开 Shell 并运行 python 时,就可以使用Rye安装独立的 Python。否则,您需要使用 Rye run python 命令来启用Rye的 Python 解释器。 。
升级Rye到最新版本:
rye自我更新
删除Rye:
货物卸载M.oing1alize
项目rye inittest_rye
cdtest_rye
树
。 。 └── test_rye
└──
可以看到已经完成了。 git 目录、.gitignore 文件、配置文件和示例源代码文件 src/test_rye/。
1.4 Python版本管理
为了完善开发环境,我们可以使用Rye pin python版本来完善Python版本。例如,rye pin cpython@ 会将您的 Python 版本更新为:
# cpython@ 省略
rye pin cpython@
rye pin
作为 Cpython@ 执行时默认的 Python 版本,默认的 Python 版本为 Cpythoni@。
注意,rye pin 命令不会立即更改 Python 版本,它仅更改配置文件。蟒蛇版本。实际的修改发生在执行黑麦同步时。
可以多次执行rye pin来设置Python版本。
然后执行Ryesync命令同步配置。具体来说,当第一次执行这个命令时,Rye会下载一个单独的Python解释器,将其放在$HOME/.rye/py目录下,并链接到项目的.venv目录下,这样你就只有一个磁盘上相同 Python 版本的副本,与 conda 不同。
一般来说,您可以使用 Rye 工具链来查看、检索和删除 Python 版本。
rye 工具链列表用于显示所有已安装的 Python 版本:
rye 工具链列表
输出:
cpython@ (/Users /install/install/install/feng/c.rye /yun bin/python3)
cpython@3.1 (/Users/yunfeng/.rye/py/cpython@3.1/install/bin/python3)
cpython@ (/Users/yunfeng/.rye/py install/ bin/python3)
cpython@ (/Users/yunfeng/.rye/py/cpython@/install/bin/python3)
rye 工具链列表 --include-downloadablethon 版本:
rye 工具链list --contains-download
输出:
rye toolchain fetch(简称 rye fetch)可以直接获取特定的 Python 版本: 可以通过Rye添加包名来安装numpy等第三方。该命令支持安装GitHub和本地包。一些使用示例: 与 Rye Package Add 类似,但实际上并不只是安装配置文件中的更改依赖项,它不会直到 Rye 同步不执行安装为止进行安装。?后期更新代码和配置文件 注意,Rye是只负责管理依赖关系,具体来说你还要做调试工作。只需使用您知道的代码测试方法即可。 此外,您还可以使用 Rye shell 打开新的Rye Python 兼容 Shell 进行代码调试。 安装可执行的全局Python工具 除了Python源代码之外,一些Python包还包含一些命令行工具。Rye将这些工具称为全球工具,因为它们不是在特定环境中使用,而是在全球范围内可用。这些工具可以使用 rye 安装包名称进行安装,例如: 如何使用: rye run 工具名称:cpython@(可下载)
cpython@(可下载)py
cpython@(可下载)
cpython@(下载)
cpython@(下载)
cpython@(下载)下载❙ Python 版本不包含此输出。rye toolchain fetch 3.8.16
1.5添加依赖包
rye 工具链获取可以删除remove 3.8.16
rye add numpy
# 一次安装多个包
rye add 6 easydict
# 设置安装包版本♺ add Frylask >="
# 添加包即可开发环境中
rye add --dev black
# 在 github 上添加包
rye add Flask --git=https://github.com/pallets/flask
# 将包添加到本地directory
rye add My-Utility --path ./my-utility
rye install black
rye run black -h 这些软件包是它们存储在 $HOME/.rye/shims 目录中。如果要删除全局设备,请使用Rye uninstall:
rye uninstall black
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。