陈天 · Rust 编程第一课
陈天
Tubi TV 研发副总裁
23195 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 65 讲
基础篇 (21讲)
陈天 · Rust 编程第一课
15
15
1.0x
00:00/00:00
登录|注册

32|实操项目:使用PyO3开发Python3模块

完整代码示例
缺省参数
构造函数
错误处理
将struct的方法暴露成class的方法
将Rust struct注册为Python class
One more thing
撰写代码
Makefile创建
build.rs准备工作
Cargo.toml配置
思考题
小结
项目挑战开始
索引配置文件样例
Rust代码示例
项目目标:为Rust搜索引擎提供Python接口
PyO3和Neon工具简介
FFI基本用法介绍
实操项目:使用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 看上去还不错(我没有用过),但整体来说,这两个社区都需要有更强大的搜索引擎。
Rust 下,嵌入式的搜索引擎有 tantivy,我们就使用它来提供搜索引擎的功能。
不过,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
立即购买
登录 后留言

全部留言(6)

  • 最新
  • 精选
  • Marshal SHI
    之前我在medium上分享过比较PyO3和rust、python速度的文章,大家有兴趣可以看看。在release下PyO3可以提供和rust相似的速度 (不要忘记`--release`) 文章链接:https://link.medium.com/iWSbYCrS3kb

    作者回复: 👍

    2021-11-10
    6
  • nuan
    准备工作->"创建 build.rs,并添入:" 中,build.rs 的链接链到哪里了?

    编辑回复: 本地建,链接去掉了免得有误导~

    2022-02-15
    1
  • Litt1eQ
    老师您好,想咨询一下,如果使用pyo3能否有什么比较方便的办法可以在mac上直接编译出来linux win mac可运行的package 现在我用的maturin 如果用借助docker官方给出了可以编译出来Linux可运行的package的方案,但是编译出win可用package我也没发现可用的方案,谢谢了。

    作者回复: 你可以在 github action 里编译不同系统下的 package

    2021-11-15
    2
  • 阿海
    作者你好,看到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
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部