1 个不稳定版本
新功能 0.1.0 | 2024年8月26日 |
---|
#110 在 FFI
96 每月下载量
10KB
149 行
pyo3-commonize

使用此crate,使用 #[pyclass] 定义的类可以在多个用PyO3构建的Python本地扩展之间传递。
快速设置
示例:将定义在 acceptor
crate中的 MyClass
类从 donor
传递到 acceptor
。
acceptor
crate
- 在
Cargo.toml
[package]
name = "acceptor"
version = "0.1.0"
edition = "2021"
[lib]
crate-type = ["rlib", "cdylib"]
[dependencies]
pyo3-commonize = "0.1.0"
pyo3 = "*" # pyo3-commonize fixes pyo3 version
- 在
pyproject.toml
[build-system]
requires = ["poetry-core>=1.0.0", "maturin>=1.0,<2.0"]
build-backend = "maturin"
[project]
name = "acceptor"
version = "0.1.0"
license = { text = "MIT" }
- 在
src/lib.rs
use pyo3::prelude::*;
use pyo3_commonize::{commonize, Commonized};
#[pyclass]
#[derive(Commonized)]
pub struct MyClass;
#[pyfunction]
fn accept(_my_class: Py<MyClass>) {}
#[pymodule]
fn acceptor(py: Python<'_>, m: Bound<'_, PyModule>) -> PyResult<()> {
// This function should be called at first
commonize::<MyClass>(py)?;
m.add_function(wrap_pyfunction!(accept, &m)?)?;
Ok(())
}
donor
crate
- 在
Cargo.toml
[package]
name = "donor"
version = "0.1.0"
edition = "2021"
[lib]
crate-type = ["rlib", "cdylib"]
[dependencies]
pyo3-commonize = "0.1.0"
pyo3 = "*" # pyo3-commonize fixes pyo3 version
acceptor = { path = "<path>" }
- 在
pyproject.toml
[build-system]
requires = ["poetry-core>=1.0.0", "maturin>=1.0,<2.0"]
build-backend = "maturin"
[project]
name = "donor"
version = "0.1.0"
license = { text = "MIT" }
- 在
src/lib.rs
use acceptor::MyClass;
use pyo3::prelude::*;
use pyo3_commonize::commonize;
#[pyfunction]
fn generate() -> MyClass { MyClass }
#[pymodule]
fn donor(py: Python<'_>, m: Bound<'_, PyModule>) -> PyResult<()> {
commonize::<MyClass>(py)?;
m.add_function(wrap_pyfunction!(generate, &m)?)?;
Ok(())
}
依赖项
~4MB
~83K SLoC