news 2026/8/22 21:51:12

Rust 实现可以被 Python 调用的包

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Rust 实现可以被 Python 调用的包

完全固定,照抄就行

Cargo.toml

[lib] crate-type = ["cdylib", "rlib"] [dependencies] pyo3 = { version = "0.27" } [features] default = [] extension-module = ["pyo3/extension-module"]

pyproject.toml

[build-system] requires = ["maturin>=1.7,<2.0"] build-backend = "maturin" [tool.maturin] features = ["extension-module"]

这些永远不用动。


src/lib.rs—— 唯一需要你写的部分

结构是固定的,但内容是你的。看这个 repo 的实际写法:

// [src/lib.rs#L574-L579]#[pymodule]fnrustbpe(m:&Bound<'_,PyModule>)->PyResult<()>{pyo3_log::init();m.add_class::<Tokenizer>()?;// 注册你的类Ok(())}

你只需要关心两件事:

1. 函数名 = 模块名
fn rustbpe(...)这里的函数名,就是 Python 里import的名字。你写fn mylib(...)import mylib

2. 往模块里注册你的东西

想暴露的东西写法
一个类m.add_class::<MyStruct>()?+ struct 上加#[pyclass]
一个函数m.add_function(wrap_pyfunction!(my_fn, m)?)?+ fn 上加#[pyfunction]
一个常量m.add("MY_CONST", 42)?

最小可运行示例

假设你要写一个 Python 可以调用的add(a, b)函数和一个Counter类:

usepyo3::prelude::*;#[pyfunction]fnadd(a:i64,b:i64)->i64{a+b}#[pyclass]structCounter{value:i64,}#[pymethods]implCounter{#[new]fnnew()->Self{Counter{value:0}}fnincrement(&mutself){self.value+=1;}fnget(&self)->i64{self.value}}#[pymodule]fnmylib(m:&Bound<'_,PyModule>)->PyResult<()>{m.add_function(wrap_pyfunction!(add,m)?)?;m.add_class::<Counter>()?;Ok(())}

Python 端:

importmylibprint(mylib.add(1,2))# 3c=mylib.Counter()c.increment()print(c.get())# 1

总结一句话

配置文件照抄,#[pymodule]函数名改成你的模块名,然后把你的#[pyclass]/#[pyfunction]注册进去。其他的 Maturin 帮你搞定。

想了解更多 PyO3 绑定的细节和这个 repo 是怎么处理类型转换、错误的:

  • PyO3 绑定架构
  • 错误处理与类型转换
  • GIL 管理与性能优化
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/22 21:48:04

UDP与TCP协议深度解析:从核心原理到网络编程实战

1. 从“寄信”与“打电话”说起&#xff1a;理解UDP与TCP的本质如果你刚开始接触网络编程&#xff0c;或者对“协议”这个词感到既熟悉又陌生&#xff0c;那么不妨先忘掉那些复杂的术语。我们可以把网络通信想象成现实世界里的两种沟通方式&#xff1a;寄明信片和打电话。这个简…

作者头像 李华
网站建设 2026/8/22 21:48:00

3步导出QQ空间历史说说:GetQzonehistory 完整操作指南

3步导出QQ空间历史说说&#xff1a;GetQzonehistory 完整操作指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 2015年发的那条说说&#xff0c;在QQ空间页面上已经翻不到&#xff0c…

作者头像 李华
网站建设 2026/8/22 21:42:07

AI模型部署实战:FDE工程师的核心技能与工作流解析

1. 先搞清楚 FDE 这个岗位到底在做什么如果你最近关注 AI 相关的招聘&#xff0c;可能会看到一个叫FDE的岗位&#xff0c;招聘量增长非常快。很多人第一反应是&#xff1a;这又是一个新造出来的“AI 概念岗”吗&#xff1f;其实不是。FDE 的全称是Field Deployment Engineer&am…

作者头像 李华