Code前端首页关于Code前端联系我们

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

terry 2年前 (2023-09-24) 阅读数 62 #后端开发
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项目目录

    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

输出:

cpython@(可下载)
cpython@(可下载)py

  • cpython@(可下载)
    cpython@(可下载)
    cpython@(下载)
    cpython@(下载)
    cpython@(下载)下载❙ Python 版本不包含此输出。

    rye toolchain fetch(简称 rye fetch)可以直接获取特定的 Python 版本:

    rye toolchain fetch 3.8.16




    rye 工具链获取可以删除remove 3.8.16
    1.5添加依赖包

    可以通过Rye添加包名来安装numpy等第三方。该命令支持安装GitHub和本地包。一些使用示例:

    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 Package Add 类似,但实际上并不只是安装配置文件中的更改依赖项,它不会直到 Rye 同步不执行安装为止进行安装。?后期更新代码和配置文件

  • rye pin确定Python版本
  • 修改代码,rye添加包名添加代码依赖的包
  • rye同步安装Python,安装依赖包并更新配置文件
  • rye运行python进行代码测试
  • 可选:rye build生成可发布的wheel文件
  • 可选:ryepublish将包上传到pypi
  • 注意,Rye是只负责管理依赖关系,具体来说你还要做调试工作。只需使用您知道的代码测试方法即可。

    此外,您还可以使用 Rye shell 打开新的Rye Python 兼容 Shell 进行代码调试。

    安装可执行的全局Python工具

    除了Python源代码之外,一些Python包还包含一些命令行工具。Rye将这些工具称为全球工具,因为它们不是在特定环境中使用,而是在全球范围内可用。这些工具可以使用 rye 安装包名称进行安装,例如:

    rye install black

    如何使用: rye run 工具名称:

    rye run black -h 这些软件包是它们存储在 $HOME/.rye/shims 目录中。如果要删除全局设备,请使用Rye uninstall:

    rye uninstall black

    版权声明

    本文仅代表作者观点,不代表Code前端网立场。
    本文系作者Code前端网发表,如需转载,请注明页面地址。

    发表评论:

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

    热门