如何使用pybind11创建python子模块?
我克隆了python示例(https://github.com/pybind/python_example)并对其进行了修改。下面是目录树。
*
|
+-- src
| |
| +-- example.cpp
|
+-- setup.py
|
+-- python_example
|
+-- __init__.py
|
+-- cxx
|
+-- __init__.py
setup.py包含以下行:
ext_modules = [
Extension(
'python_example.cxx',
['src/main.cpp'],
include_dirs=[
# Path to pybind11 headers
get_pybind_include(),
get_pybind_include(user=True),
"include", # the include folder
],
language='c++'
),
]
setup(
...
packages=setuptools.find_packages(),
...
)
以下操作无效,因为它无法使用点名称。
PYBIND11_PLUGIN(python_example.cxx) {
...
}
以下也不起作用。
PYBIND11_PLUGIN(python_example) {
py::module m = py::module::import("python_example.cxx");
m.def("add", &add, R"pbdoc(
Add two numbers
Some other explanation about the add function.
)pbdoc");
}
这也不起作用:
py::module m2 = (py::module) py::module::import("python_example").attr("cxx");
m2.def("add", &add, R"pbdoc(...
如何使这项工作?
答案 0 :(得分:1)
cxx
是一个子包,您尝试构建具有相同名称的二进制模块。尝试以不同方式命名二进制模块以避免名称冲突。
setup.py
:
ext_modules = [
Extension(
'python_example.cxx.cxx_module',
...
main.cpp
:
PYBIND11_PLUGIN(cxx_module) {
...
}