My Environments
- Ubuntu 18.04
- Rust 1.39.0-nightly
- Python 3.7.3
What I want to do and the problems
I want to write a library for python. As my practice, I tried the code in document.
Cargo.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()
}
When I build this program, I got some errors.
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`.
This error message says that there is no "py" in pyo3 module. I looked for this error message, but I cannot find similar errors.
How to deal with this issue?