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<Vec<f64>> {
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()

得到结果如下

最新文章

  1. jQuery技巧大放送
  2. canvas :曲线的面积图 加渐变效果
  3. 提高C#代码质量-规范
  4. shell中命令之间数据的传递
  5. 《BI那点儿事》数据流转换——派生列
  6. 在dos中运行java程序,若出现Exception in thread “main&quot; java.lang.NoClassDefFoundError
  7. Puppet&#39;s Architecture 3.7
  8. 学习笔记--Grunt、安装、图文详解
  9. 【Hadoop代码笔记】Hadoop作业提交之Child启动map任务
  10. When Colon Scripting is comming
  11. ES5严格模式
  12. oracle数据库的一次异常起停处理。
  13. #021 Java复习第一天
  14. 父进程结束,其子进程不会结束,会挂到init进程下
  15. poj 1269
  16. 【转】Windows Live Writer 代码插件改造
  17. [Unity动画]03.动画事件
  18. 安卓个性化 Button
  19. 开发之道——读《移山之道——VSTS开发之道》后感
  20. Material Design系列第三篇——Using the Material Theme

热门文章

  1. Java 解决Emoji表情过滤问题(转载)
  2. 用python执行 js代码__来自脚本之家
  3. error 106: Can&#39;t Access ASP.NET\ClientFiles\
  4. asp.net core 读取Appsettings.json 配置文件
  5. istio-1.1.6镜像列表
  6. 小程序框架之视图层 View
  7. 零基础Python教程-函数及模块的使用
  8. python开发基础-Pycharm快捷键
  9. javaweb-servlet获取给定文件在服务器上的绝对路径的方法
  10. 基于 Redis 实现简单的分布式锁