pyo3 可选地为 rust 结构生成 python 绑定
pyo3 optionally generate python bindings for rust struct
我在我的代码中定义了一些结构,如果在 crate 上启用了某个功能,我也想为这些结构生成 Python 绑定。现在我无法正确获取它。假设我有一个结构 MyStruct
,我想为其选择性地生成 Python 绑定。
我试过类似下面的方法
cfg_if! {
if #[cfg(feature = "python-bindings")] {
#[pyclass]
}
else {
}
}
struct MyStruct{
value: i32
}
如果 feature
python-bindings
启用,我只想添加 #[pyclass]
,否则不添加。
如果 python-bindings
未启用,这会正常工作。但是如果我用 --features python-bindings
编译,我会得到以下错误。
error: expected item after attributes
尽量不要重复代码。喜欢
cfg_if! {
if #[cfg(feature = "python-bindings")] {
#[pyclass]
struct MyStruct{
value: i32
}
}
else {
struct MyStruct{
value: i32
}
}
}
有没有不重复代码的方法?
是的,#[cfg_attr]
:
#[cfg_attr(feature = "python-bindings", pyclass)]
struct MyStruct {
value: i32
}
我在我的代码中定义了一些结构,如果在 crate 上启用了某个功能,我也想为这些结构生成 Python 绑定。现在我无法正确获取它。假设我有一个结构 MyStruct
,我想为其选择性地生成 Python 绑定。
我试过类似下面的方法
cfg_if! {
if #[cfg(feature = "python-bindings")] {
#[pyclass]
}
else {
}
}
struct MyStruct{
value: i32
}
如果 feature
python-bindings
启用,我只想添加 #[pyclass]
,否则不添加。
如果 python-bindings
未启用,这会正常工作。但是如果我用 --features python-bindings
编译,我会得到以下错误。
error: expected item after attributes
尽量不要重复代码。喜欢
cfg_if! {
if #[cfg(feature = "python-bindings")] {
#[pyclass]
struct MyStruct{
value: i32
}
}
else {
struct MyStruct{
value: i32
}
}
}
有没有不重复代码的方法?
是的,#[cfg_attr]
:
#[cfg_attr(feature = "python-bindings", pyclass)]
struct MyStruct {
value: i32
}