-
命令行创建一个新的Rust项目
cargo new --lib rust_python_ext
-
配置
Cargo.toml
toml[package] name = "rust_python_ext" version = "0.1.0" edition = "2024" [lib] name = "rust_python_ext" crate-type = ["cdylib"] [dependencies] pyo3 = { version = "0.20.0", features = ["extension-module", "macros"] }
-
编辑
src/lib.rs
文件rust#![allow(unsafe_op_in_unsafe_fn)] use pyo3::prelude::*; #[pyfunction] // 定义一个Python可调用的函数 // i32: 32位整数 fn add(a: i32, b: i32) -> i32 { a + b } // 重点:函数名必须和 .pyd 文件名一致(这里是 `rust_python_ext`) #[pymodule] // 定义一个Python模块 // 模块初始化函数,接收Python解释器实例和模块对象,且名字必须与项目名一致 // _py:Python解释器实例(下划线表示未使用) // m:表示初始化的模块对象 // &表示不可变引用 // PyResult<()> 表示一个可能返回Python异常或成功的操作结果 fn rust_python_ext(_py: Python, m: &PyModule) -> PyResult<()> { m.add_function(wrap_pyfunction!(add, m)?)?; // ?用于错误处理 Ok(()) // 返回成功结果,表示模块初始化成功 }
-
命令行测试Python安装成功,
python --version
,pyo3 0.20.0支持的python版本为3.7-3.11
-
命令行构建
cargo build --release
-
在
target/release
找到rust_python_ext.dll
,复制到Python项目中,将后缀改为.pyd
-
保证
rust_python_ext.pyd
和调用的py文件在同一目录下,在其中调用pythonimport rust_python_ext print(rust_python_ext.add(1,2))
Rust学习日记:编写一个Python扩展
m0_521118232025-04-06 16:26
相关推荐
hui函数2 小时前
Flask电影投票系统全解析闲人编程3 小时前
Python第三方库IPFS-API使用详解:构建去中心化应用的完整指南计算机编程小咖4 小时前
《基于大数据的农产品交易数据分析与可视化系统》选题不当,毕业答辩可能直接挂科zhangfeng11335 小时前
以下是基于图论的归一化切割(Normalized Cut)图像分割工具的完整实现,结合Tkinter界面设计及Python代码示flashlight_hi6 小时前
LeetCode 分类刷题:2529. 正整数和负整数的最大计数Ashlee_code6 小时前
香港券商櫃台系統跨境金融研究Jia-Hui Su7 小时前
GDSFactory环境配置(PyCharm+Git+KLayout)学习3人组8 小时前
手写数字识别代码古译汉书8 小时前
蓝桥杯算法之基础知识(2)——Python赛道少陵野小Tommy8 小时前
Python能用古诗词数据库做什么7:根据标题、诗句查找诗歌