我写了锈代码:myapp/src/main.rs
extern crate cpython;
use cpython::Python;
fn main() {
let gil = Python::acquire_gil();
println!("Hello from Rust!");
let py = gil.python();
let module = cpython::PyModule::import(py, "fibo").unwrap();
module.call(py, "fib", (1,), None).unwrap();
}
并将Python模块保存为
myapp/pyth/fibo.py
但我得到了错误:
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: PyErr { ptype: <class 'ModuleNotFoundError'>, pvalue: Some(ModuleNotFoundError("No module named 'fibo'",)), ptraceback: None }', libcore/result.rs:945:5
我希望知道的关于目录
pyth
的部分代码是:let module = cpython::PyModule::import(py, "fibo").unwrap();
最佳答案
如果您想将fibo.py
作为一个独立于可执行文件的文件保存,我可以看到两种解决方案:
您可以将pyth
文件夹添加到Python路径:
let sys = py.import("sys")?;
PyList::downcast_from(py, sys.get("path")?)?.insert_item(py, 0, "pyth");
let module = py.import("fibo")?;
这假设Rust可执行文件是从父文件夹或项目运行的,这意味着
pyth
是当前路径的子文件夹。或者可以导入
pyth.fibo
,就像在Python中一样:let module = py.import("pyth.fibo")?;
这假设
pyth
位于Python路径中的某个位置(如果需要将父文件夹添加到路径中,请参阅第一个解决方案)。关于rust - 使用cpython crate导入Python模块时出现ModuleNotFoundError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51409744/