zoukankan      html  css  js  c++  java
  • 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<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()
    

    得到结果如下

  • 相关阅读:
    一步一步学习Unity3d学习笔记系1.2 单机游戏和网游的数据验证概念
    一步一步学习Unity3d学习笔记系1.1
    Mongodb 官网驱动2.2.4.26版本 增,删 改,查
    使用Zxing 一维码
    Linq 数据排序,分页
    easyui datagrid 批量编辑和提交数据
    Json序列化为对象方法
    百度地图车辆运动轨迹
    GridView后台绑定数据列表方法
    删除重复数据
  • 原文地址:https://www.cnblogs.com/c-x-a/p/11959511.html
Copyright © 2011-2022 走看看