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()

得到结果如下

mac安装rust的pyo3模块的更多相关文章

  1. mac安装apache的mod_wsgi模块

    第一次用pip安装 ,最终不能使用,原因是系统自带的apache,python和新安装的冲突, 所以需要安装时需要指定apache,python路径 所以用make makeinstall方式 参考链 ...

  2. mac安装rust

    1.安装 curl https://sh.rustup.rs -sSf | sh 使用brew各种出错,还慢. 2编译 source $HOME/.cargo/env 3.版本查看 rustc --v ...

  3. 在 mac 系统上安装 python 的 MySQLdb 模块

    在 mac 系统上安装 python 的 MySQLdb 模块 特别说明:本文主要参考了Mac系统怎么安装MySQLdb(MySQL-Python) 第 1 步:下载 MySQL-python-1.2 ...

  4. mac下Apache添加限速模块mod_bw

    官方文档: Apache2 - Mod_bw v0.7 Author : Ivan Barrera A. (Bruce) HomePage : Http://Ivn.cl/apache & h ...

  5. Mac安装python3.x+pycharm+elasticsearch+常见报错处理(1)

    ---恢复内容开始--- mac安装python有两种方式:此处叙述官网安装下载. mac 自带python2.x版本,python2和3之间的差距还是有的.下面简单叙述我安装python3.7的过程 ...

  6. Mac安装crfpp

    Mac安装crfpp 步骤 git clone https://github.com/taku910/crfpp.git ./configure make sudo make install cd p ...

  7. Mac安装vue

     Mac安装vue 一.安装brew 打开终端运行以下命令: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com ...

  8. Mac安装python细节

    前言 之前在windows平台上安装python直接用Anaconda,优点是所有的科学计算的库都整合进去了,安装方便.在Mac系统下,当然也可以直接安装Anaconda,但是考虑到Mac会自带pyt ...

  9. Mac安装vue.js开发环境

    Mac安装vue.js开发环境 DannyHooDanny的专栏订阅 一.vue.js开发环境 二.初始化一个vue.js项目 三.vue.js项目打包部署 本来以为在Mac上搭建vue.js的环境挺 ...

随机推荐

  1. ROMTableAddr = 0xE00FF003 错误 Target DLL has been cancelled 错误

    JTAG下载固件错误 keil下载固件错误 如下错误 * JLink Info: Found SWD-DP with ID 0x1BA01477 * JLink Info: Found SWD-DP ...

  2. c#生成高清字体图片

    Graphics g = Graphics.FromImage(image); g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.Hig ...

  3. python 提取目录中特定类型的文件

    python使用‘os’和‘re’模块提取目录中特定类型的文件,这两个模都是安装python自带的,所以不需要安装. 思路: 使用os库lilstdir获取文件夹中的所有文件名,然后带上文件夹路径组合 ...

  4. [nginx] nginx源码分析--SNI性能分析

    概念 我们已经知道什么是SNI,以及如何为用户配置SNI. [nginx] nginx使用SNI功能的方法 问题 通过观察配置文件,可以发现,针对每一个SSL/TLS链接, nginx都会动态的查找( ...

  5. mysql 登录报错

    执行命令:mysql -u root -p 错误:error while loading shared libraries: libncurses.so.5: cannot open shared o ...

  6. MySQL将某个数据库下的所有表的存储引擎修改为InnoDB类型语句

    如何将mysql数据库中的MyISAM类型表更改为InnoDB类型的表 改单个表 ALTER TABLE TABLENAME ENGINE=InnoDB; ALTER TABLE TABLENAME ...

  7. Kotlin编译器优化与when关键字详解

    Any类型: 定义一个函数,其参数接受所有类型,对于Java而言Object是所有类的基类,而在Kotlin中得用Any关键字,如下: 其中瞅一下该Any字段是个啥类型: 然后里面做一些判断: 这是因 ...

  8. java 获取某年某月最后一天

    Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, 2016); calendar.set(Calendar ...

  9. SQL 语句中关于 NULL 的那些坑

    问题描述 今天在跟进公司内部测试平台线上问题的时候,发现一个忽略已久的问题. 为了简化问题描述,将其进行了抽象. 有一张数据表qms_branch,里面包含了一批形式如下所示的数据: id name ...

  10. 域渗透:LSA Protection

    简介:微软在 2014 年 3 月 12 日添加了 LSA 保护策略,用来防止对进程 lsass.exe 的代码注入,这样一来就无法使用 mimikatz 对 lsass.exe 进行注入,相关操作也 ...