Python aus C++ über pybind11 aufrufen
Verpacken Sie C++-Code mit pybind11 als Python-Modul.
Python aus C++ über pybind11 aufrufen ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum pybind11?
pybind11 ist eine reine Header-Bibliothek, die mit minimalem Boilerplate Python-Bindings für C++-Code erstellt. Sie wird von SciPy, TensorFlow und vielen anderen Projekten verwendet.
Ein minimales Modul
Definieren Sie ein Python-Modul in einer einzigen Datei mit dem Makro PYBIND11_MODULE.
#include <pybind11/pybind11.h>
namespace py = pybind11;
int add(int a, int b) { return a + b; }
PYBIND11_MODULE(mymodule, m) {
m.def("add", &add, "Add two integers");
}Das Modul erstellen
Erstellen Sie es als Python-Erweiterungsmodul — normalerweise mit CMake oder setuptools.
# CMake
find_package(pybind11 REQUIRED)
pybind11_add_module(mymodule mymodule.cpp)Aus Python verwenden
Importieren und verwenden Sie es wie jedes andere Python-Modul.
# Python
import mymodule
print(mymodule.add(2, 3)) # 5Klassen verfügbar machen
Verwenden Sie py::class_, um eine C++-Klasse zu binden. Konstruktoren, Methoden und Eigenschaften werden jeweils auf Python-Entsprechungen abgebildet.
class Point {
public:
Point(int x, int y) : x_(x), y_(y) {}
int x() const { return x_; }
int y() const { return y_; }
private:
int x_, y_;
};
PYBIND11_MODULE(geom, m) {
py::class_<Point>(m, "Point")
.def(py::init<int, int>())
.def("x", &Point::x)
.def("y", &Point::y);
}Typkonvertierungen
pybind11 konvertiert häufig verwendete Typen automatisch:
std::string↔ Python-strstd::vector<T>↔ Python-Listestd::map↔ Python-Dict- Numerische Typen ↔ Python-int/float
NumPy-Interoperabilität
Übergeben Sie NumPy-Arrays als py::array_t<T>. Greifen Sie für Zero-Copy-Operationen auf den Buffer zu.
void scale(py::array_t<double> arr, double factor) {
auto buf = arr.mutable_unchecked<1>();
for (size_t i = 0; i < buf.size(); ++i)
buf(i) *= factor;
}Lambdas als Bindings
Binden Sie ein Lambda direkt, wenn Sie Argumente umwandeln oder Verhalten kapseln möchten.
m.def("show", [](const Point& p) {
return "(" + std::to_string(p.x()) + ", " + std::to_string(p.y()) + ")";
});Den GIL freigeben
Geben Sie bei lang laufenden C++-Berechnungen den GIL frei, damit andere Python-Threads ausgeführt werden können.
m.def("slow", []() {
py::gil_scoped_release release;
// expensive C++ work, no Python access
});Leistung
pybind11 verursacht nur minimalen Overhead — normalerweise einige hundert Nanosekunden pro Aufruf. Bei nichttrivialen Funktionen ist das vernachlässigbar, in engen Schleifen mit günstigen aufgerufenen Funktionen kann es jedoch relevant sein.
Alternativen
Weitere Python-C++-Brücken:
- Boost.Python — älter und umfangreicher
- SWIG — unterstützt viele Sprachen
- nanobind — neuer und schneller als pybind11
Praxisnahe Anwendungsfälle
pybind11 eignet sich ideal für:
- das Kapseln einer C++-Bibliothek für Python-Nutzer
- das Beschleunigen zeitkritischer Python-Pfade mit C++-Code
- das gemeinsame Verwenden numerischer Kerne in C++-Anwendungen und Python-Werkzeugen
Kurztest
Mit welchem Makro deklariert pybind11 ein Python-Modul?
Zusammenfassung
pybind11 macht das Kapseln von C++ für Python nahezu mühelos. Deklarieren Sie Module mit PYBIND11_MODULE, binden Sie Funktionen mit m.def und Klassen mit py::class_. Die integrierten Konvertierungen decken STL-Typen ab; NumPy-Arrays werden ohne Kopie verwendet.
Häufig gestellte Fragen
Ist die Lektion „Python aus C++ über pybind11 aufrufen“ kostenlos?
Ja — der vollständige Text von „Python aus C++ über pybind11 aufrufen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Python aus C++ über pybind11 aufrufen“?
Verpacken Sie C++-Code mit pybind11 als Python-Modul. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C++ Academy zu starten?
Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Python aus C++ über pybind11 aufrufen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?
Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Extern C und die C-ABI
- Python aus C++ über pybind11 aufrufen
- C++ für Rust-FFI-Grenzen
- SWIG für sprachübergreifende Bindings verwenden