【发布时间】:2022-01-11 05:45:52
【问题描述】:
我正在尝试用 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”的新文件夹。我通过那里找到了库文件应该在哪里,但似乎没有生成适当的文件。我有这些。
这些对我来说似乎不可用。我不确定我做错了什么。
我将这些文件中的每一个都复制到了另一个文件夹中,并尝试在 python 中导入它们。这没有用。我尝试将它们更改为 .so 文件,但这不起作用。 windows应该在这里输出一个dll,但是尝试导入时dll文件不起作用。它不能用作 dll 文件或 so 文件。我不确定在这里做什么。此外,似乎在我看到的所有其他教程或指南中生成这些文件时,每个文件的名称上都有一个“lib”前缀。我没有得到这样的前缀。
【问题讨论】:
-
您很好地告诉我们您是如何到达现在的位置,但您忘记告诉我们您是如何尝试使用这些库的(以及您是如何决定它们不可用的)错误,您需要
.so文件而不是.dll文件吗?他们做错了吗?不要专注于回答我的问题,专注于用你自己的话描述你遇到的问题。 -
@EdwinBuck 我已经编辑了这个问题,以便更清楚地说明这一点。
-
也许您应该关注this page,这似乎比您找到的教程更新得多。
标签: rust rust-cargo