Open bminixhofer opened 4 years ago
Interesting!
It seems that enabling feature = "extension-module"
is not a strict addition to the pyo3
crate, but will disable some linking options (cargo:rustc-link-search=native=...
).
Cargo automatically takes the union of all requested features of a crate through the whole dependency graph, which includes the procedural macros. This means that feature = "extension-module"
will also be enabled for inline-python-macros
, which uses PyO3 in a proc macro to compile the Python code at (Rust) compile time. That crate is not an extension module, as it will not be loaded by Python, but by the Rust compiler. That fails.
I don't know much about how this works on Windows and Mac, but on Linux it works fine to make an extension module without extension-module
enabled.
Thanks for the quick response!
The follow up is a bit beyond my expertise, but I agree that this is an issue with PyO3 as features should be strictly additive. There has in fact already been discussion about this in https://github.com/PyO3/pyo3/issues/771.
Additionally, from PyO3s Cargo.toml
:
# Use this feature when building an extension module.
# It tells the linker to keep the python symbols unresolved,
# so that the module can also be used with statically linked python interpreters.
extension-module = []
it seems that extension-module
is only required for statically linked Python interpreters, which I am fine with not supporting for now.
IMO it is fine to close this issue.
But I would consider adding a small note to the How to Use section in the Readme indicating that the extension-module
feature must not be enabled for inline-python
to work. Otherwise this could be confusing, especially because the error message is rather cryptic.
Does the new Cargo feature resolver solve this issue (by no longer unifying proc-macro and build dependency features with "run-time" dependencies)?
Hi! Awesome project. I'm currently working on Python bindings for a Rust library. I occasionally have to call small Python snippets from the Rust code. This library would be a very elegant solution to that.
However, when I try to compile
inline-python
with the feature"extension-module"
in PyO3 enabled I get an error:To reproduce
Cargo.toml
src/lib.rs
Rust version: rustc 1.45.0-nightly (fa51f810e 2020-04-29)
Thanks for any help!