PyO3功能很强大,是python和rust之间交互桥梁。今天主要试验一下python端调用rust端编译的代码库。

说明:本文环境中在windos平台和WSL下 unbuntu18.04平台。linux其它平台或其它平台请参看github上pyo3的说明。
另外,python要求python3版本以上。

一、rust 端

在rust端创建pyrust库文件:

cargo new myrust --lib

同时在lib.rs文件中,写入以下代码:
其中,#[pyfunction]是指写入rust方法,pyo3自动会转成python能调用的函数;
#[pymodule]是指把这些函数放在一个module下。

接下来:cargo.toml文件

其中,crate-type中的选项比较重要;还有依赖项pyo3的设置。

接下来build:

可以在target/release下发现,相关的dll文件
以上rust端工作基本完成。

记住这个文件:my_rust.dll,包括路径。后面有重要用途。切记!

二、python端

1、我们新建一个python文件的文件夹rust2py,写入一个test.py文件。

代码如下:

2、我们把此前提过的“my_rust.dll”,拷贝至rust2py下,与test.py同一级目录下。

需要注意的是,不要把"my_rust.pdb"文件拷过来,我开始就把"pdb"和"pyd"搞错了。

3、对dll文件进行重命名:

bash my_rust.dll => my_rust.pyd.

这样,python端的准备工作就ok了。

这样,你就可以运行test.py文件了!

三、相关代码

1、lib.rs文件


use pyo3::prelude::*;
use pyo3::wrap_pyfunction;#[pyfunction]
fn add(x: f64, y: f64) -> f64 {return x+y
}#[pyfunction]
fn sum_as_string(a: usize, b: usize) -> PyResult<String> {Ok((a + b).to_string())
}#[pymodule]
fn my_rust(_py: Python<'_>, m: &PyModule) -> PyResult<()> {m.add_function(wrap_pyfunction!(add, m)?)?;m.add_function(wrap_pyfunction!(sum_as_string, m)?)?;Ok(())
}

2、cargo.toml

[package]
name = "myrust"
version = "0.1.0"
authors = ["songroom"]
edition = "2018"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[lib]
name = "my_rust"
crate-type = ["cdylib"][dependencies.pyo3]
version = "0.13.2"
features = ["extension-module"]

3、test.py

from my_rust import add,sum_as_string
print("add value :",add(1,2))
print("sum_as_string: ",sum_as_string(5,6))
print("hello world")

四、WSL 下unbuntu平台

前面是尝试windows平台。对于linux unbuntu版本下(我这儿是WSL2 下unbuntu18.04):

sudo apt install python3-dev python-dev

创建了一个rust2py项目:


对应release下编译成的:librust2py.so文件
需要把这个文件copy到.py文件同一目录下,并改名:

librust2py.so文件 => rust2py.so文件

最后在WSL下,需要注意要用python3来执行。
如果没有注意用python而不是python3,则会一直报错!

PyO3: python调用rust代码尝试相关推荐

  1. 【Rust 日报】2021-11-26 使用 PyO3 从 Python 调用 Rust

    使用 PyO3 从 Python 调用 Rust PyO3 让 Python 调用 Rust 代码变得容易.用户可以编写 Rust 库,并依靠 PyO3 和生态系统中maturin的支持工具的组合 P ...

  2. 使用PyO3从Python调用 Rust:加速Python

    使用 Rust 加速你的 Python: PyO3使从 Python 调用 Rust 代码变得容易.您可以编写 Rust 库,并依靠 PyO3 和生态系统中maturin的支持工具的组合PyO3来编译 ...

  3. Python调用Java代码部署及初步使用

    Python调用Java代码部署: jpype下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#jpype 下载的时候需要使用Chrome浏览器进行下载 ...

  4. python调用java代码方法

    前言: 公司要测试对外接口,接口中的数据又涉及到加密的问题,而python对加密数据进行位运算后,居然无法逆向位运算回来了(应该是个人能力不够吧),只好调用同事之前用的java代码中的函数去解码了,花 ...

  5. 如何实现Python调用C代码--python与C之间如何通信(swig)

    转载: https://www.zhihu.com/question/23003213 1. C代码如何调用Python 1.1 test #include <Python.h> int ...

  6. python调用opencv代码_Python调用OpenCV实现图像平滑代码实例

    主要讲解Python调用OpenCV实现图像平滑,包括四个算法:均值滤波.方框滤波.高斯滤波和中值滤波. 给图像增加噪声: import cv2 import numpy as np def test ...

  7. flutter/dart通过ffi调用rust代码

    ffi简介 FFI(Foreign Function Interface)是用来与其它语言交互的接口,在有些语言里面称为语言绑定(language bindings),Java 里面一般称为 JNI( ...

  8. python调用c代码

    Linux环境下使用python调用C的printf例子: #!/usr/bin/env python2.7 #-*- coding:utf-8 -*- from ctypes import * de ...

  9. 二十四节气查询 Python调用示例代码

    二十四节气的时间.由来.习俗以及养生 二十四节气查询 查询二十四节气 复制代码 查询节气详情 复制代码 注意,该示例代码仅适用于 www.apishop.net网站下API 使用该产品前,您需要通过 ...

最新文章

  1. Python 之 matplotlib (十五)主次坐标轴
  2. Spring Cloud Alibaba基础教程:Nacos的数据持久化
  3. zebra打印机注意点
  4. 怎么更新android 10.0,Android 10.0(Q OS)系统升级计划Androi
  5. java 同步 变量,在java中的对象上同步,然后更改同步的变量的值
  6. bs4 乱码_Python BeautifulSoup中文乱码问题的2种解决方法
  7. 基础算法 —— 调度问题
  8. js实现点击“验证码”开始倒计时
  9. Java咖啡馆(8)——大话面向对象(下)
  10. 平安资管罗水权:建设债券投资的智慧中台
  11. 机器学习——神经网络(四):BP神经网络
  12. 使用ssh远程连接家庭电脑
  13. 如何让企业微信的消息在微信里显示?
  14. php抽奖的数字滚动器,JS数字抽奖游戏实现方法
  15. python3 解决除法中循环小数计算并判断循环体
  16. apk文件被安装到模拟器系统的/data/app文件下
  17. android 小视频添加水印,安卓手机怎么给视频加水印 视频加水印的手机软件|微信小视频怎么加水印...
  18. 【杂】孔明锁6根解法 九连环的拆卸方法及还原
  19. Jarvis-拍立淘里面的深度学习引擎
  20. 项目一 Windows Server 2012 R2服务器安装与配置

热门文章

  1. oracle分页怎么查询,简单实例解释Oracle分页查询
  2. SpringCloud基本使用教程(一)
  3. 零基础学会MongoDB启动与停止
  4. base on 和 be based on 的区别
  5. STM32之TIM 舵机控制PWM
  6. C/C++中部分我不太了解的函数和头文件——iomanip和setw和setfill() 函数
  7. 如何和用户一起写汇报材料
  8. BERT使用过程中添加special tokens
  9. 每周工作4小时,蒂莫西·费里斯 最理想的工作方式和生活方式,QQ群666243547
  10. Android安装完成打开与完成区别