我将遵循这个示例,将用Rust编写的函数导入到python应用程序中:https://depth-first.com/articles/2022/03/09/python-extensions-in-pure-rust-with-rust-cpython/
输出为'libfunction '。我应该将其重命名为'function '。so',将其移动到python app.py所在的文件夹中,然后我应该能够在python中导入它(假设模块只是暴露了一个名为greet的函数):
from function import greet
是否有一些python环境的设置,我错过了?即使我完全使用本文链接的存储库,python也找不到模块(检查了10次名称拼写正确,文件是否在正确的文件夹中等):
ModuleNotFoundError: No module named function
货物。汤姆将是
[package]
name = "function"
version = "0.1.0"
edition = "2021"
[lib]
crate-type = ["cdylib"]
[dependencies]
cpython = "0.7"
[features]
default = ["python3"]
python3 = ["cpython/python3-sys", "cpython/extension-module"]
lib.rs:
use cpython::{py_module_initializer, py_fn, PyResult, Python};
fn greet(_: Python, name: String) -> PyResult<String> {
Ok(format!("Hello, {}!", name))
}
py_module_initializer! {
function, |py, module| {
module.add(py, "greet", py_fn!(py, greet(string: String)))?;
Ok(())
}
}
根据本期建议,py_module_initializer!{function, ...}
宏生成一个名为PyInit_function
的模块导出函数,共享对象名称必须与之匹配。将libfunction.so
重命名为function.so
,并像这样导入:
from function import greet