我写了锈代码:
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
rust - 使用cpython crate导入Python模块时出现ModuleNotFoundError-LMLPHP
但我得到了错误:
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/

10-11 20:41