Rust学习日记:编写一个Python扩展

参考https://segmentfault.com/a/1190000044555330

  1. 命令行创建一个新的Rust项目cargo new --lib rust_python_ext

  2. 配置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"] }
  3. 编辑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(())	// 返回成功结果,表示模块初始化成功
    }
  4. 命令行测试Python安装成功,python --version,pyo3 0.20.0支持的python版本为3.7-3.11

  5. 命令行构建cargo build --release

  6. target/release找到rust_python_ext.dll,复制到Python项目中,将后缀改为.pyd

  7. 保证rust_python_ext.pyd和调用的py文件在同一目录下,在其中调用

    python 复制代码
    import rust_python_ext
    print(rust_python_ext.add(1,2))
相关推荐
KangkangLoveNLP18 分钟前
手动实现一个迷你Llama:手动实现Llama模型
网络·人工智能·python·算法·机器学习·自然语言处理·llama
Ronin-Lotus25 分钟前
深度学习篇---模型训练(1)
人工智能·python·深度学习
ak啊40 分钟前
Python 实现 GPU 加速图像处理
python
无名之逆41 分钟前
在Rust生态中探索高性能HTTP服务器:Hyperlane初体验
运维·服务器·开发语言·后端·http·rust·自动化
独好紫罗兰1 小时前
洛谷题单3-P5724 【深基4.习5】求极差 最大跨度值 最大值和最小值的差-python-流程图重构
开发语言·python·算法
大模型真好玩1 小时前
基于 MCP Http SSE模式的天气助手智能体开发实战(一文带你了解MCP两种开发模式)
人工智能·python·mcp
聪明的一休哥哥1 小时前
Python+DeepSeek组合拳:30秒生成专业级PPT(附可复制代码)
python
-嘟囔着拯救世界-1 小时前
1️⃣ 智能体基础入门教学(2025年全新版本)
人工智能·python·aigc·教程·ai agent·智能体·coze
rocksun1 小时前
使用Docker Scout和Python自动化容器安全审计
python·ci/cd·docker
阿白63051 小时前
基于学生信息表的进阶数据分析与可视化:打造你的专属数据洞察博客
python