PyO3: python调用rust代码尝试
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代码尝试相关推荐
- 【Rust 日报】2021-11-26 使用 PyO3 从 Python 调用 Rust
使用 PyO3 从 Python 调用 Rust PyO3 让 Python 调用 Rust 代码变得容易.用户可以编写 Rust 库,并依靠 PyO3 和生态系统中maturin的支持工具的组合 P ...
- 使用PyO3从Python调用 Rust:加速Python
使用 Rust 加速你的 Python: PyO3使从 Python 调用 Rust 代码变得容易.您可以编写 Rust 库,并依靠 PyO3 和生态系统中maturin的支持工具的组合PyO3来编译 ...
- Python调用Java代码部署及初步使用
Python调用Java代码部署: jpype下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#jpype 下载的时候需要使用Chrome浏览器进行下载 ...
- python调用java代码方法
前言: 公司要测试对外接口,接口中的数据又涉及到加密的问题,而python对加密数据进行位运算后,居然无法逆向位运算回来了(应该是个人能力不够吧),只好调用同事之前用的java代码中的函数去解码了,花 ...
- 如何实现Python调用C代码--python与C之间如何通信(swig)
转载: https://www.zhihu.com/question/23003213 1. C代码如何调用Python 1.1 test #include <Python.h> int ...
- python调用opencv代码_Python调用OpenCV实现图像平滑代码实例
主要讲解Python调用OpenCV实现图像平滑,包括四个算法:均值滤波.方框滤波.高斯滤波和中值滤波. 给图像增加噪声: import cv2 import numpy as np def test ...
- flutter/dart通过ffi调用rust代码
ffi简介 FFI(Foreign Function Interface)是用来与其它语言交互的接口,在有些语言里面称为语言绑定(language bindings),Java 里面一般称为 JNI( ...
- python调用c代码
Linux环境下使用python调用C的printf例子: #!/usr/bin/env python2.7 #-*- coding:utf-8 -*- from ctypes import * de ...
- 二十四节气查询 Python调用示例代码
二十四节气的时间.由来.习俗以及养生 二十四节气查询 查询二十四节气 复制代码 查询节气详情 复制代码 注意,该示例代码仅适用于 www.apishop.net网站下API 使用该产品前,您需要通过 ...
最新文章
- Python 之 matplotlib (十五)主次坐标轴
- Spring Cloud Alibaba基础教程:Nacos的数据持久化
- zebra打印机注意点
- 怎么更新android 10.0,Android 10.0(Q OS)系统升级计划Androi
- java 同步 变量,在java中的对象上同步,然后更改同步的变量的值
- bs4 乱码_Python BeautifulSoup中文乱码问题的2种解决方法
- 基础算法 —— 调度问题
- js实现点击“验证码”开始倒计时
- Java咖啡馆(8)——大话面向对象(下)
- 平安资管罗水权:建设债券投资的智慧中台
- 机器学习——神经网络(四):BP神经网络
- 使用ssh远程连接家庭电脑
- 如何让企业微信的消息在微信里显示?
- php抽奖的数字滚动器,JS数字抽奖游戏实现方法
- python3 解决除法中循环小数计算并判断循环体
- apk文件被安装到模拟器系统的/data/app文件下
- android 小视频添加水印,安卓手机怎么给视频加水印 视频加水印的手机软件|微信小视频怎么加水印...
- 【杂】孔明锁6根解法 九连环的拆卸方法及还原
- Jarvis-拍立淘里面的深度学习引擎
- 项目一 Windows Server 2012 R2服务器安装与配置
热门文章
- oracle分页怎么查询,简单实例解释Oracle分页查询
- SpringCloud基本使用教程(一)
- 零基础学会MongoDB启动与停止
- base on 和 be based on 的区别
- STM32之TIM 舵机控制PWM
- C/C++中部分我不太了解的函数和头文件——iomanip和setw和setfill() 函数
- 如何和用户一起写汇报材料
- BERT使用过程中添加special tokens
- 每周工作4小时,蒂莫西·费里斯 最理想的工作方式和生活方式,QQ群666243547
- Android安装完成打开与完成区别