32|实操项目:使用PyO3开发Python3模块
陈天
该思维导图由 AI 生成,仅供参考
你好,我是陈天。
上一讲介绍了 FFI 的基本用法,今天我们就趁热打铁来做个实操项目,体验一下如何把 Rust 生态中优秀的库介绍到 Python/Node.js 的社区。
由于社区里已经有 PyO3 和 Neon 这样的工具,我们并不需要处理 Rust 代码兼容 C ABI 的细节,这些工具就可以直接处理。所以,今天会主要撰写 FFI shim 这一层的代码:
另外,PyO3 和 Neon 的基本操作都是一样的,你会用一个,另一个的使用也就很容易理解了。这一讲我们就以 PyO3 为例。
那么,做个什么库提供给 Python 呢?
思来想去,我觉得 Python 社区里可以内嵌在程序中的搜索引擎,目前还是一块短板。我所知道的 whoosh 已经好多年没有更新了,pylucene 需要在 Python 里运行个 JVM,总是让人有种说不出的不舒服。虽然 Node.js 的 flexsearch 看上去还不错(我没有用过),但整体来说,这两个社区都需要有更强大的搜索引擎。
不过,tanvity 的接口比较复杂,今天的主题也不是学习如何使用一个搜索引擎的接口,所以我做了基于 tanvity 的 crate xunmi,提供一套非常简单的接口,今天,我们的目标就是:为这些接口提供对应的 Python 接口,并且让使用起来的感觉和 Python 一致。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了如何使用PyO3开发Python3模块的实操项目。作者通过实际项目演示了如何使用PyO3为Rust代码提供Python接口,并展示了如何让Rust代码在Python中使用。文章重点讲解了如何使用PyO3提供的宏,方便地将Rust的数据结构、函数、数据结构的方法以及错误类型映射成Python的类、函数、类的方法以及异常。整体而言,本文通过实际项目的演示,向读者展示了如何使用PyO3开发Python3模块,为读者提供了一种将Rust代码引入Python生态的实践方法。文章内容涉及了PyO3的使用复杂、struct的方法暴露成class的方法、错误处理、构造函数、缺省参数等技术特点。文章还提到了PyO3是一个非常成熟的让Python和Rust互操作的库,以及对PyO3的使用只是冰山一角,还允许在Rust下调用Python代码。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《陈天 · Rust 编程第一课》,新⼈⾸单¥68
《陈天 · Rust 编程第一课》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(6)
- 最新
- 精选
- Marshal SHI之前我在medium上分享过比较PyO3和rust、python速度的文章,大家有兴趣可以看看。在release下PyO3可以提供和rust相似的速度 (不要忘记`--release`) 文章链接:https://link.medium.com/iWSbYCrS3kb
作者回复: 👍
2021-11-106 - nuan准备工作->"创建 build.rs,并添入:" 中,build.rs 的链接链到哪里了?
编辑回复: 本地建,链接去掉了免得有误导~
2022-02-151 - Litt1eQ老师您好,想咨询一下,如果使用pyo3能否有什么比较方便的办法可以在mac上直接编译出来linux win mac可运行的package 现在我用的maturin 如果用借助docker官方给出了可以编译出来Linux可运行的package的方案,但是编译出win可用package我也没发现可用的方案,谢谢了。
作者回复: 你可以在 github action 里编译不同系统下的 package
2021-11-152 - 阿海作者你好,看到Makefile文件中,有一句mv xxx.dylib yyy.so 百度了下, dylib是macos平台下的,对这个格式不是很了解,看构建脚本,是可以直接将.dylib重命名为.so 文件使用的吗
作者回复: 对
2021-11-14 - 余泽锋平时工作一直用python来做数据处理,老师说的这些对我来说太有用了,使用rust提供一些高性能库给python使用。真是太棒了。
作者回复: 👍
2021-11-10 - 雪无痕老师能否讲下,在rust下如何开发一个通用的插件框架?
作者回复: 你可以看看这篇:https://adventures.michaelfbryan.com/posts/plugins-in-rust/
2021-11-10
收起评论