python - 当我在 Rust 中使用 pyo3 构建 python 库时出现错误“根目录中没有 py”
问题描述
我的环境
- Ubuntu 18.04
- Rust 1.39.0-nightly
- Python 3.7.3
我想做什么和问题
我想为python编写一个库。作为我的实践,我尝试了文档中的代码。
货运.toml
[package]
name = "example"
version = "0.1.0"
authors = ["Yudai Hayashi"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[lib]
name = "example"
crate-type = ["cdylib"]
[dependencies]
[dependencies.pyo3]
version = "*"
features = ["extension-module"]
src/lib.rs
#![feature(proc_macro, specialization)]
extern crate pyo3;
use pyo3::{py, PyResult, Python, PyModule};
use pyo3::py::modinit as pymodinit;
// add bindings to the generated python module
// N.B: names: "librust2py" must be the name of the `.so` or `.pyd` file
/// This module is implemented in Rust.
#[pymodinit(rust2py)]
fn init_mod(py: Python, m: &PyModule) -> PyResult<()> {
#[pyfn(m, "sum_as_string")]
// pyo3 aware function. All of our python interface could be declared in a separate module.
// Note that the `#[pyfn()]` annotation automatically converts the arguments from
// Python objects to Rust values; and the Rust return value back into a Python object.
fn sum_as_string_py(_: Python, a:i64, b:i64) -> PyResult<String> {
let out = sum_as_string(a, b);
Ok(out)
}
Ok(())
}
// logic implemented as a normal Rust function
fn sum_as_string(a:i64, b:i64) -> String {
format!("{}", a + b).to_string()
}
当我构建这个程序时,我遇到了一些错误。
error[E0432]: unresolved import `pyo3::py`
--> src/lib.rs:4:12
|
4 | use pyo3::{py, PyResult, Python, PyModule};
| ^^
| |
| no `py` in the root
| help: a similar name exists in the module: `Py`
error[E0432]: unresolved import `pyo3::py`
--> src/lib.rs:6:11
|
6 | use pyo3::py::modinit as pymodinit;
| ^^ could not find `py` in `pyo3`
error: cannot determine resolution for the attribute macro `pymodinit`
--> src/lib.rs:11:3
|
11 | #[pymodinit(rust2py)]
| ^^^^^^^^^
|
= note: import resolution is stuck, try simplifying macro imports
error: cannot find attribute macro `pyfn` in this scope
--> src/lib.rs:14:7
|
14 | #[pyfn(m, "sum_as_string")]
| ^^^^
error: aborting due to 4 previous errors
For more information about this error, try `rustc --explain E0432`.
error: Could not compile `example`.
此错误消息表明 pyo3 模块中没有“py”。我查找了此错误消息,但找不到类似的错误。
如何处理这个问题?
解决方案
推荐阅读
- node.js - Vue-repo“模块构建失败:错误:未找到 ESLint 配置”
- python - 如何从列表中删除一个值,并从另一个列表中删除相同位置的值
- javascript - 超时 - 在 5000 毫秒超时内未调用异步回调,并且必须明确调用 done()
- android - CMake add_subdirectory 给定的源不是现有目录
- visual-studio-2008 - 数组构造函数和数组初始化 - gnu fortran vs intel fortran
- f# - 如何在 F# 中使用地图作为类型?
- java - 如何为一个变量循环控制台输入并打印多个答案?
- r - 如何从 GA 超参数调整中获取 RMSE 值?
- batch-file - 使用批处理文件,如何命名一个像 year_month 这样的文件,日期从现在开始增加 1 个月?
- javascript - 如何打印多维数组中的元素