Repository navigation
Usage in PyO3 extension module #27
Description
Activity
Interesting!
It seems that enabling
feature = "extension-module"is not a strict addition to thepyo3crate, 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 forinline-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-moduleenabled.See PyO3/pyo3#904
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 PyO3/pyo3#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-moduleis 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-modulefeature must not be enabled forinline-pythonto work. Otherwise this could be confusing, especially because the error message is rather cryptic.- added a commit that references this issue
on May 5, 2020 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-pythonwith the feature"extension-module"in PyO3 enabled I get an error:To reproduce
Cargo.tomlsrc/lib.rsRust version: rustc 1.45.0-nightly (fa51f810e 2020-04-29)
Thanks for any help!