remove outdated workaround in module documentation (#2466)

* remove workaround section in module.md that is no longer needed after merging #2081

* update changelong

* revert CHANGELOG
This commit is contained in:
Sam Vente 2022-06-21 23:02:10 +02:00 committed by GitHub
parent 53b83cccbf
commit cdb3b6ff32
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -62,80 +62,6 @@ import my_extension
print(my_extension.__doc__)
```
## Organizing your module registration code
For most projects, it's adequate to centralize all your FFI code into a single Rust module.
However, for larger projects, it can be helpful to split your Rust code into several Rust modules to keep your code
readable. Unfortunately, though, some of the macros like `wrap_pyfunction!` do not yet work when used on code defined
in other modules ([#1709](https://github.com/PyO3/pyo3/issues/1709)). One way to work around this is to pass
references to the `PyModule` so that each module registers its own FFI code. For example:
```rust
// src/lib.rs
use pyo3::prelude::*;
#[pymodule]
fn my_extension(py: Python<'_>, m: &PyModule) -> PyResult<()> {
dirutil::register(py, m)?;
osutil::register(py, m)?;
Ok(())
}
// src/dirutil.rs
# mod dirutil {
use pyo3::prelude::*;
pub(crate) fn register(py: Python<'_>, m: &PyModule) -> PyResult<()> {
m.add_class::<SomeClass>()?;
Ok(())
}
#[pyclass]
struct SomeClass {/* ... */}
# }
// src/osutil.rs
# mod osutil {
use pyo3::prelude::*;
pub(crate) fn register(py: Python<'_>, m: &PyModule) -> PyResult<()> {
m.add_function(wrap_pyfunction!(determine_current_os, m)?)?;
Ok(())
}
#[pyfunction]
fn determine_current_os() -> String {
"linux".to_owned()
}
# }
```
Another workaround for splitting FFI code across multiple modules ([#1709](https://github.com/PyO3/pyo3/issues/1709))
is to add `use module::*`, like this:
```rust
// src/lib.rs
use pyo3::prelude::*;
use osutil::*;
#[pymodule]
fn my_extension(py: Python<'_>, m: &PyModule) -> PyResult<()> {
m.add_function(wrap_pyfunction!(determine_current_os, m)?)?;
Ok(())
}
// src/osutil.rs
# mod osutil {
use pyo3::prelude::*;
#[pyfunction]
pub(crate) fn determine_current_os() -> String {
"linux".to_owned()
}
# }
```
## Python submodules
You can create a module hierarchy within a single extension module by using