繁体   English   中英

无法为 python 创建 rust 库

[英]Can not create rust library for python

我正在尝试在 rust 中制作 python 模块。 我仍然无法获取我需要生成的文件。 我几乎完全按照本教程进行操作。

https://mycognosist.github.io/tutorial-rust-python-lib.html

这是我的 toml 文件。

name = "pylib"
version = "0.1.0"
authors = ["Atops"]
edition = "2018"

[lib]
name = "status"
crate-type = ["cdylib"]

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies.cpython]
version = "0.5"
features = ["extension-module"]

这是 lib.rs 的代码

extern crate cpython;

use cpython::{PyResult, Python, py_fn, py_module_initializer};

pub extern fn hello(_py: Python, val: String) -> PyResult<String> {
    match &*val {
        "hello" => Ok("world".to_string()),
        _ => Ok("afdfs".to_string()),
    }
}

py_module_initializer!(status, initstatus, Pyinit_status, |py, m|{
    m.add(py, "__doc__", "asdhgdfs")?;
    m.add(py, "hello", py_fn!(py, hello(val: String)))?;
    Ok(())
});

我使用 cargo.toml 文件导航到相应的文件夹,并使用教程中指定的 cargo build --release。 它以一些关于某些事情“不是 FFI 安全”的警告结束。 当它完成时,会创建一个名为“target”的新文件夹。 我通过 go 到达库文件应该在的位置,但似乎没有生成适当的文件。 我有这些。

目标\释放

这些似乎对我没有用。 我不确定我做错了什么。

我将这些文件中的每一个复制到另一个文件夹并尝试将它们导入 python。 这没有用。 我尝试将它们更改为 .so 文件,但这不起作用。 似乎 windows 应该是 output 一个 dll 在这里,但是 Z06416233FE5EC4C593Z312E 文件在尝试导入时不起作用。 它不能用作 dll 文件或 so 文件。 我不确定在这里做什么。 此外,似乎在我看到的所有其他教程或指南中生成这些文件时,每个文件的名称上都有一个“lib”前缀。 我没有这样的前缀。

A dll file contains shared object code for COFF systems (like Windows) while a so file generally contains shared object code for ELF (and other) systems like Linux.

重命名它们在任何情况下都不起作用。 如果你有一个并且需要另一个,你需要在正确的、匹配的操作系统上重建它们。

我认为您可能在 Windows 机器上遵循 Linux 的说明(由于 lib 前缀),然后期望某些说明起作用。 如果您可以识别平台之间的所有“更改”并修改 Linux 指令以匹配 Windows 平台,它们可能会起作用; 但是在您知道如何将一个环境的指令转换为另一个环境之前,如果您只找到一组 Windows 指令,这些指令仅引用dll文件并且不提及so文件,则可能会更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM