rust edition python3_mac安装rust的pyo3模块

Rust 发布的工具链包括了 stable、beta 和 nightly 三种不同版本。 nightly 是最激进的版本,包含了大量(可能不稳定)的新/高级特性。stable 版本目前可能还不支持一些高级特性。beta 介于两者之间。

我们首先安装nightly版本

rustup install nightly

如果安装过就更新

rustup update nightly

切换到nightly

rustup default nightly

版本查看

rustc 1.41.0-nightly (412f43ac5 2019-11-24)

mac需要配置

在文件夹.cargo创建config文件

cd ~/.cargo

touch config

subl config

输入下面内容

[target.x86_64-apple-darwin]

rustflags = [

"-C", "link-arg=-undefined",

"-C", "link-arg=dynamic_lookup",

]

创建项目

cargo +nightly new pyo3demo

执行上面的命令之后会创建一个pyo3demo文件夹,该文件夹里包含一个Cargo.toml配置文件和src文件夹。

所有要用cargo管理的必须有Cargo.toml文件,而且必须是这个名字,而且首字母必须大写。

Cargo.toml内容如下

[package]

name = "r2p"

version = "0.1.0"

edition = "2018"

[lib]

name = "r2p"

crate-type = ["cdylib"]

[dependencies.pyo3]

version = "0.8.3"

features = ["extension-module"]

然后src文件下面创建lib.rs。内容如下:

use pyo3::prelude::*;

use std::f64::consts::PI;

use pyo3::wrap_pyfunction;

#[pyfunction]

fn hello() -> PyResult {

println!("公众号:Python学习开发");

Ok(())

}

#[pyfunction]

fn pi_times( n: usize ) -> PyResult> {

Ok(

(0..n).map(|i| i as f64 * PI).collect()

)

}

#[pymodule]

fn r2p(_py: Python, m: &PyModule) -> PyResult {

m.add_wrapped(wrap_pyfunction!( hello ))?;

m.add_wrapped(wrap_pyfunction!( pi_times ))?;

Ok(())

}

返回项目根目录编译

cargo +nightly build --release

如果执行成功,会生成一个target文件夹,进入target还有个release文件。

发现文件libr2p.dylib,将其拷贝到项目根目录,然后重命名为r2p.so。

到目前为止rust这边的工作就都做完了。

下面是python这边的

打开python3

import r2p

r2p.hello()

得到结果如下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值