Wie erstellt man Python-Submodule mit pybind11?Hinzufügen von C++ - Funktion zum vorhandenen Python-Modul mit pybind11
Ich Klon das Python-Beispiel (https://github.com/pybind/python_example) und änderte es. Unten ist der Verzeichnisbaum.
*
|
+-- src
| |
| +-- example.cpp
|
+-- setup.py
|
+-- python_example
|
+-- __init__.py
|
+-- cxx
|
+-- __init__.py
setup.py hat die folgenden Zeilen:
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(),
...
)
Die folgende funktioniert nicht, weil es keine Namen mit Punkt nehmen.
PYBIND11_PLUGIN(python_example.cxx) {
...
}
Das Folgende funktioniert auch nicht.
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");
}
Das funktioniert auch nicht:
py::module m2 = (py::module) py::module::import("python_example").attr("cxx");
m2.def("add", &add, R"pbdoc(...
Wie diese Arbeit machen?
Hoffnung besteht ... Das scheint verwandt zu sein: http://pybind11.readthedocs.io/en/stable/advanced/misc. html # partitioning-code-over-multiple-extension-modules –
Ich denke, die Lösungen sind anders;) Könnten Sie versuchen, das Beispiel zu minimieren (wie ein Modul kein Paket verwenden) und vollständiger (geben Sie an, was das erste Modul ist , was ist der zweite, fügen Sie Beispielcode vorzugsweise hinzu)? – krassowski
Ich habe bereits die Lösung gefunden. –