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

    得到结果如下

  • 相关阅读:
    asp window.showModalDialog浏览器不兼容的解决方案
    JavaScript倒计时算法(计算剩余多少天)实现
    (全程图解)Axure RP8.0安装教程
    HTML通过超链接传递参数到JSP页面-html与jsp交互
    JavaWeb中登录验证码生成
    PowerDesigner16.5安装教程
    前台正则的使用
    稀疏算法Sparse
    ajax请求超时解决方案
    修改默认select样式
  • 原文地址:https://www.cnblogs.com/c-x-a/p/11959511.html
Copyright © 2011-2022 走看看