0Pricing
C++ Academy · Lektion

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))   # 5

Klassen 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-str
  • std::vector<T> ↔ Python-Liste
  • std::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

  1. Extern C und die C-ABI
  2. Python aus C++ über pybind11 aufrufen
  3. C++ für Rust-FFI-Grenzen
  4. SWIG für sprachübergreifende Bindings verwenden
← Zurück zu C++ Academy