Rye,一个超好用的 Python 工具

Python 项目管理工具 Rye 的工作原理 本文简单介绍了rye的工作原理。在研究它的工作原理的过程中,看了一下rye的源代码。看起来项目不大,值得学习一下。如果你有兴趣,还可以深入地研究一下。我暂时就研究到这里了,以后也许发现了更多原理,再回来补充。 阅读详情
AI摘要

本文介绍了Rye,由Flask作者ArminRonacher开发的实验性Python包管理系统,旨在解决当前包管理工具的碎片化问题。Rye借鉴了Rust的工具链管理策略,通过workspace和standalonePython版本来简化环境管理和版本冲突。作者认为Rye有望改善Python社区的包管理体验,尽管未来能否成为主流还有待观察。

你好,我是坚持分享干货的 EarlGrey,翻译出版过《Python编程无师自通》、《Python并行计算手册》等技术书籍。

如果我的分享对你有帮助,请关注我,一起向上进击。

本文作者:YunfengWang,来源:https://vra.github.io/2023/05/17/rye-intro

Rye 是Flask的作者Armin Ronacher最近推出的一个实验性质的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尝试对这些问题给出一个解决方案,但也需要不同的系统来支持,目前看还任重道远。

Rye 的解决方案

由于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作为第三方库包

但同时也有一个问题:rye会不会是另一个做不到主流的Python包管理系统,从而进一步增加Python包管理的碎片化呢?作者也有这个考虑,因此写了一个讨论帖 Should Rye Exist?来讨论这个问题,同时关于Rye的设计初衷,可以参考这里作者的思考。

个人观点:Rye的出现给Python社区引入了一些新鲜的解决现有问题的思路。使用Rye一段时间后,发现至少使用standalone 的Python版本是一个解决冲突的好的方式。通过几个简单的命令来解决版本管理的问题是比较直观的,提出Rye应该是利大于弊的,也就是有益程度大于碎片化增加的程度。

总之不管是PEP 668中标记版本管理是系统的还是Python的,还是PEP 711来单独下发Python解释器二进制文件,还是Rye的出现,都是Python社区意识到Python包管理问题的严重性,进而做出的一些有益尝试。期待在未来,有更标准化的工具,Python的开发也更容易。

安装和使用Rye

下面将对Rye的安装和使用进行简单介绍。

安装rustup

Rye是基于Rust 开发的,而Rust 有标准的包安装工具cargo,Rust编译器和cargo都需要用rustup来安装,因此安装预编译的Rye包需要先安装rustup:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

执行完后,重启Shell,输入cargo -V,如果不报错,说明安装成功。

安装Rye

有了cargo后,使用下面的命令安装Rye:

cargo install --git https://github.com/mitsuhiko/rye rye

通过命令行执行rye -h 来判断 Rye是否安装成功。

同时可以将$HOME/.rye/shims 添加到环境变量PATH 中,这样打开Shell后运行python 就用的是Rye安装到standalone Python,否则你需要用rye run python 来启用Rye的Python解释器。

更新Rye到最新版:

rye self update

删除Rye:

cargo uninstall rye

初始化一个Rye项目

使用rye init project-name 来创建一个Rye项目目录

rye init test_rye
cd test_rye
tree

输出如下:

├── .git
├── .gitignore
├── .python-version
├── README.md
├── pyproject.toml
└── src
    └── test_rye
        └── __init__.py

可以看到创建了.git 目录, .gitignore 文件,README.md,配置文件pyproject.toml 和一个示例的源码文件src/test_rye/__init__.py。

Python 版本管理

为了固定开发环境,我们可以利用rye pin python-version 来固定Python的版本,例如rye pin cpython@3.10.11 会将Python版本固定为3.10.11。

# cpython@可以省略
rye pin cpython@3.10.11
rye pin 3.10.11

由于默认使用的Python版本是Cpython的,因此在执行rye命令时可以将Cpython@ 前缀省去。

注意 rye pin命令并不立即改变Python的版本,只是修改配置文件.python-version,在rye sync 执行时才进行实际的修改。

可以多次执行rye pin 来调整Python的版本。

然后执行rye sync 来同步配置,具体来说,第一次执行这个命令的时候,Rye会下载一个单独的Python解释器,放置到$HOME/.rye/py目录下,链接到项目的.venv 目录下,因此同一个Python版本在磁盘上只有一份,这与conda是不同的。

更一般地,可以使用rye toolchain 来查看、拉取和删除Python版本。

rye toolchain list 用来显示所有已经安装的Python版本:

rye toolcahin list

输出:

cpython@3.11.3 (/Users/yunfeng/.rye/py/cpython@3.11.3/install/bin/python3)
cpython@3.11.1 (/Users/yunfeng/.rye/py/cpython@3.11.1/install/bin/python3)
cpython@3.10.11 (/Users/yunfeng/.rye/py/cpython@3.10.11/install/bin/python3)
cpython@3.10.9 (/Users/yunfeng/.rye/py/cpython@3.10.9/install/bin/python3)

rye toolchain list --include-downloadable 会列出所有可以下载的Python版本:

`rye toolchain list --include-downloadable`

输出:

cpython@3.10.8 (downloadable)
cpython@3.10.7 (downloadable)
cpython@3.10.6 (downloadable)
cpython@3.10.5 (downloadable)
cpython@3.10.4 (downloadable)
cpython@3.10.3 (downloadable)
cpython@3.10.2 (downloadable)
cpython@3.10.0 (downloadable)
...

注意已经下载的Python版本不在这个输出中。

rye toolchain fetch(简写为rye fetch) 可以直接拉取某个Python版本:

rye toolchain fetch 3.8.16

rye toolchain remove 可以删除某个Python版本:

rye toolchain remove 3.8.16

添加依赖包

可以通过rye add package-name 来安装像numpy等第三方,这个命令支持安装GitHub和本地的包,一些示例的用法如下:

rye add numpy
# 同时安装几个包
rye add six easydict
# 设置安装包的版本
rye add "Flask>=2.0"
# 只在development环境添加包
rye add --dev black
# 添加github上的包
rye add Flask --git=https://github.com/pallets/flask
# 添加本地目录的包
rye add My-Utility --path ./my-utility

同样的,rye add并不会实际安装包,只会修改配置文件pyproject.toml 中的dependencies 项,等执行rye sync的时候才真正安装。

Rye工作流

我自己探索的Rye工作流大概是这样:

  1. rye init project-name 来初始化项目目录

  2. git add 和git commit 来提交初始状态的代码,方便定位后续代码和配置文件的更新

  3. rye pin 指定Python版本

  4. 修改代码,rye add package-name 来增加代码依赖的包

  5. rye sync来安装Python,安装依赖包,更新配置文件

  6. rye run python 执行代码测试

  7. 可选:rye build 来生成可发布的wheel文件

  8. 可选:rye publish 上传包到pypi

需要注意的是,Rye只负责依赖管理,具体的调试代码工作,还需要自己来进行,使用你熟悉的代码测试方式就可以了。

额外补充一下,可以使用rye shell 来打开一个新的启用了Rye Python的Shell来进行代码调试。

安装可执行的 global Python工具

某些python包除了包含Python源码外,还包含一些命令行工具,Rye称这些工具为global tool ,因为它们不是在某个环境中才能使用,而是全局可使用的。这些工具可以用rye install package-name来安装,例如:

rye install black

使用方式为rye run tool-name:

rye run black -h

这些包都存放在$HOME/.rye/shims 目录下。
如果要删除 global tool,可以使用rye uninstall:

rye uninstall black

- EOF -

文章已经看到这了,别忘了在右下角点个“赞”和“在看”鼓励哦~

推荐阅读  点击标题可跳转

1、Python 项目工程化最佳实践

2、Python 可以比 C 还要快!

3、streamlit,一个超强的 Python 库

4、豆瓣8.9分的C++经典之作,免费送!

5、Python 3.12 版本有什么变化?

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,领取进击的Grey与小伙伴一起翻译的《Think Python 2e》电子版

回复关键词「书单02」,领取进击的Grey整理的 10 本 Python 入门书的电子版

👇关注我的公众号👇

告诉你更多细节干货

3fc47037711f614ed5b3c186ba03c6d9.jpeg

欢迎围观我的朋友圈

👆每天更新所想所悟

Rye一个强大的Python包管理工具 这是一个由Flask框架作者用rust开发并维护的一个python包管理工具,经过个人体验和使用还是非常不错的,尽管它还并非正式版本,但其易用性和便捷性均值得我们来体验!其中他对python各版本的管理比其他同类工具要好,安装rye可以不用提前再去安装python,当你项目用到那个版本时再去安装对应的版本即可!并且可以用虚拟环境来管理项目,而且默认创建的虚拟环境就在项目根目录,既可以使用rye默认命令来管理虚拟环境,还支持通过pip来安装包! 阅读详情

相关推荐

智能车竞赛疯狂电路组:Altium Designer赛道设计与计分策略全解析

本文全面解析智能车竞赛疯狂电路组中,如何利用Altium Designer进行专业赛道设计。从软件基础操作、图层管理与封装库调用,到赛道拓扑绘制、核心尺寸规范,详细拆解设计全流程。文章深入结合计分策略,指导如何在设计阶段植入策略点,优化路径与元器件布局,以在比赛中获得时间优势,并提供了从图纸输出到实地测试的完整避坑指南。

beta5的博客 585

Rye: 一个革新的Python包管理工具

Rye作为一个新兴的Python包管理工具,虽然还处于实验阶段,但其创新的理念和解决方案已经显示出巨大的潜力。随着社区的不断探索和实践,我们有理由相信,Rye将成为Python开发者的得力助手,为Python生态系统带来更加健康和繁荣的未来。

AIGC搞起 1915

基于Apache MINA SSHD配置及应用

Apache MINA SSHD是一个基于Java的开源SSH服务器/客户端实现,支持SSH2协议,提供文件传输、shell访问等功能。该代码实现了一个SftpClientService服务类,封装了SFTP文件操作,包括读取文件(readOnce/readLines)和写入文件(writeOnce)等核心功能。通过SftpProperties配置类管理连接参数,并采用Builder模式创建SSH会话。主要特点包括:支持大文件分块传输、自动创建目录、严格的异常处理和...

流沙QuickSand 945

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

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

Python栈 595

Zotero PDF Translate插件实战:DeepL API免费申请与高效翻译配置指南

本文提供Zotero PDF Translate插件配置DeepL API的完整实战指南。详细介绍了如何免费申请DeepL API密钥,解决国内访问问题,并在插件中完成精细配置,实现文献阅读时的无缝划词翻译,大幅提升科研人员和学生的英文文献阅读效率。

rum55的博客 458

手把手教你学Simulink--基于车联网与智能交通系统的场景实例:基于车联网(V2X)的实时路况信息共享与处理

《基于Simulink的车联网(V2X)实时路况共享系统仿真》摘要:本文详细介绍使用Simulink构建V2X智能交通系统的完整方法。系统包含交通路网建模、V2X通信实现(支持DSRC/C-V2X标准)、多源路况信息融合、动态路径规划等核心模块。通过对比实验,验证V2X可使平均车速提升52%,行程时间缩短34%,显著提升交通效率。文章还探讨了AI预测调度、车辆编队等高级应用,为智慧交通系统开发提供实用参考。所需工具包括Simulink、SimEvents及无线通信工具箱等。

MHD0815的博客 739

python 包管理rye开启uv与软链接symlink

python包管理rye与uv的关系,以及如何开启软链接

cookic12346的专栏 1961

目标跟踪与视频时序分析基础

两帧均有目标,却因快速移动导致检测框无重叠,仅靠交并比(IoU)无法维持身份关联。本文通过手算与纯Python实现最小跟踪流程,揭示IoU仅为位置线索,不能应对快速位移或遮挡。实验表明,即使目标真实存在,低重叠也会触发新编号。强调跟踪需结合运动预测、外观特征与阈值验证,避免误判。

Mr数据杨 2335

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

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

Trb401012的博客 1063

深度学习驱动的股票波动率预测:LSTM和Transformer模型的实战解析

股票市场的波动率一直是金融领域关注的焦点之一。波动率预测对于风险管理、期权定价和资产配置至关重要。深度学习模型,如长短时记忆网络(LSTM)和Transformer,已经在时间序列数据分析领域取得了显著的成就。本博客将向您展示如何使用这两种深度学习模型来进行股票波动率预测,提供清晰的思路和相应的Python代码,以帮助您理解和应用这一重要任务。

斌擎科技 974

基于YOLOv8与UI界面的校园垃圾分类督导系统

YOLO(You Only Look Once)是目前最为广泛使用的目标检测算法之一。它通过一次前向传递即完成目标检测,具有极高的速度与效率。YOLOv8是YOLO系列的最新版本,相比于之前的YOLO版本,YOLOv8在速度、精度、检测能力等方面都有了显著的提升。本项目通过结合YOLOv8模型与UI界面,成功实现了校园垃圾分类督导系统。该系统能够自动识别不同类型的垃圾,并通过UI界面实时展示垃圾分类的结果。

YOLO 337

探索未来Python管理的新可能:Rye

探索未来Python管理的新可能:Rye 【免费下载链接】rye rye - 一个实验性的 Python 包管理解决方案,用于安装和管理 Python 安装、pyproject.toml 文件、依赖项以及幕后的 virtualenvs。 项目地址: https:/...

gitblog_00079的博客 762

总结目前开源的视频生成/视频编辑大模型

随着Sora的爆火,视频生成和视频编辑受到了越来越多的关注。这篇博客总结一下目前开源的视频生成和视频编辑的大模型,并分析他们各自的优缺点,以及在自己进行科研任务或者工作中应该如何选用对应的开源模型,希望能给从事这一领域研究和使用的小伙伴们帮助。

沉迷单车的追风少年 3544

Rye 完整使用教程

Rye 安装与配置安装rye工具并配置环境,附带完整使用案例包含打包exe。

zhenndbc的博客 2249

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Rye 工具链注册完全指南:用 `rye toolchain register` 接入本地与自编译 Python

`rye toolchain register` 是 Rye 提供的一条"自定义工具链注册"命令,用于将磁盘上已经存在的 Python 解释器(如 Homebrew 安装的 CPython、官方 PyPy 发行版、甚至你亲手编译的 Python)登记为 Rye 可用的工具链。读完本文,你将掌握 register 的完整参数用法、名称自动检测的底层原理、注册结果在 `~/.rye/py` 目录中的落

gitblog_00751的博客 1030

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Rye性能基准:与其他Python包管理工具的全面对比测试

Python包管理工具的性能对比测试对于开发者选择合适的工具至关重要。Rye作为一个实验性的Python包管理解决方案,在性能方面有着独特的优势。本文将为您展示Rye与其他主流工具的性能基准测试结果。💪 Rye性能测试显示,这款工具在依赖解析、虚拟环境管理和项目初始化等关键操作上表现出色。通过系统性的性能对比,我们可以清楚地看到不同工具在真实场景下的表现差异。 ## 🚀 性能测试环境与方法

gitblog_00387的博客 883

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Rye Python版本锁定终极指南:rye pin命令的完整版本控制策略

在Python开发中,版本控制是确保项目稳定性和可重复性的关键环节。Rye作为一款优秀的Python项目管理工具,提供了强大的版本锁定功能,其中`rye pin`命令是管理Python版本的核心工具。本文将为您详细介绍如何使用Rye的版本锁定功能,让您的Python项目开发更加高效和可靠。🎯 ## 为什么Python版本锁定如此重要? Python版本锁定对于项目开发至关重要,它确保了:

gitblog_01172的博客 769

rye toolchain list 完全指南:查询已安装与可下载的 Python 工具链

`rye toolchain list` 是 Rye 工具链管理子命令族(`fetch` / `list` / `register` / `remove`)中的查询入口,用于列出当前机器上所有已注册(已安装)的 Python 工具链。本指南以 [docs/guide/commands/toolchain/list.md](https://link.gitcode.com/i/cbe9efe8def

gitblog_01116的博客 934

深入理解Rye:Python项目与包管理的革命性工具

深入理解Rye:Python项目与包管理的革命性工具 【免费下载链接】rye a Hassle-Free Python Experience 项目地址: https://gitcode.com/gh_mirrors/rye/rye...

gitblog_00410的博客 555

如何快速掌握 Rye 项目初始化:rye init 命令的完整使用指南

Rye 作为一款致力于提供无忧 Python 开发体验的工具,其 `rye init` 命令是项目创建的核心入口。本文将详细介绍如何通过该命令快速搭建各类 Python 项目,帮助新手轻松开启开发之旅。 ## 基础项目创建:最简初始化流程 创建基础 Python 项目只需一个简单命令: ```bash rye init my-project ``` 该命令会在当前目录下生成名为 `my-p

gitblog_00200的博客 947

Rye:Python包管理的革命性工具介绍

Rye:Python包管理的革命性工具介绍 【免费下载链接】rye a Hassle-Free Python Experience 项目地址: https://gitcode.com/gh_mirrors/rye/rye ...

gitblog_00004的博客 551

Rye Tools 全局工具安装指南:使用 `rye install` 管理全局 Python 工具与 shim

Rye 通过 `rye tools`(别名 `rye install` / `rye uninstall`)提供全局工具安装能力,让 `black`、`ruff` 这类 Python CLI 工具以独立虚拟环境的方式安装到 `~/.rye/tools/` 并在 `~/.rye/shims` 生成可直接调用的 shim,从而实现"一次安装、全局使用"。本文以 [docs/guide/tools.md

gitblog_00828的博客 374

rye,一个实用的 Python 库!

rye库允许用户自定义依赖配置,以便更好地管理项目依赖。rye库是一个功能强大且易于使用的虚拟环境管理工具,能够帮助开发者在 Python 项目中高效地管理和使用虚拟环境。通过支持简洁的命令行操作、自动依赖管理、多版本 Python 支持和丰富的插件扩展,rye库能够满足各种复杂的虚拟环境管理需求。本文详细介绍了rye库的安装方法、主要特性、基本和高级功能,以及实际应用场景。希望本文能帮助大家全面掌握rye库的使用,并在实际项目中发挥其优势。

涛哥聊Python 1027

Rye 全局配置完全指南:config.toml、RYE_HOME 与 ry e config 命令详解

Rye 是一个追求"零麻烦 Python 体验"(a Hassle-Free Python Experience)的 Python 工程管理工具,其绝大多数配置沉淀在项目级 `pyproject.toml` 中,但同时也提供了一套全局配置体系,用于影响 Rye 自身的行为。本文以 [docs/guide/config.md](https://link.gitcode.com/i/7b95cc144

gitblog_01134的博客 764

Rye项目add命令详解:高效管理Python依赖包

Rye项目add命令详解:高效管理Python依赖包 【免费下载链接】rye rye - 一个实验性的 Python 包管理解决方案,用于安装和管理 Python 安装、pyproject.toml 文件、依赖项以及幕后的 virtualenvs。 ...

gitblog_00003的博客 475
上一篇: Python 还能用来剪视频?!
下一篇: Python 制作进度条,原来有这么多方法!
codingpy
博客等级 码龄11年 1870粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值