Verschachteln Sie Module in Boost.Python

Was du machen willst

Erstellen Sie in Boost.Python ein Modul mit einer Struktur, die dem unten gezeigten Python-Modul (möglicherweise einem Paket, um genau zu sein) entspricht.

mainmodule/
    ├ __init__.py
    ├ submodule1/
    │    ├ __init__.py
    │    └ hoge.py
    ├ submodule2/
    │    ├ __init__.py
    │    └ foo.py
        :
        :

Import ist

import mainmodule
from mainmodule.submodule1 import hogehoge  # mainmodule/submodule1/hoge.hogehoge ist in py definiert
from mainmodule import submodule2

Es wird so sein.

Wer ist das Ziel dieses Artikels?

Dieser Artikel beschreibt eine ziemlich komplizierte Verwendung von Boost.Python. Daher ist es für Personen gedacht, die Boost.Python mindestens einmal verwendet haben.

Wenn Sie Boost.Python nicht verwendet haben, aber daran interessiert sind, klicken Sie hier letboost :: python --Kmonos.net Bitte vorbereiten.

Informationsquelle darüber, was Sie tun möchten

Ich finde oft einen Weg, Klassen zu verschachteln, aber ich konnte keine Verschachtelung von Modulen finden, machen Sie sich also eine Notiz. Originalseite Pakete in Python-Erweiterungsmodulen

Wie macht man

Ich denke, es ist schneller, den Quellcode zu sehen, also ist es plötzlich der Quellcode.

Deklarieren Sie das äußerste Modul.

BOOST_PYTHON_MODULE(mainmodule) {
    using namespace boost::python;

    object package = scope();
    package.attr("__path__") = "mainmodule";

    export_submodule1();
    export_submodule2();
        :
}

Eine Funktion, die ein Submodul deklariert

void export_submodule1() {
    using namespace boost::python;
    // from mainmodule.submodule1 Ermöglicht den Aufruf in Form eines Imports
    object module(handle<>(bp::borrowed(PyImport_AddModule("mainmodule.submodule1"))));
    //Vom Hauptmodul-Import kann Submodul1 verwendet werden
    scope().attr("submodule1") = module;
    //Legen Sie den Bereich fest
    scope scope1 = module;
    //Definieren Sie verschiedene notwendige Funktionen und Klassen
    def("hogehoge", &hogehoge);
        :
}

Wie benutzt man

Es kann wie ein normales Python-Modul verwendet werden, daher gibt es keine spezifische Erklärung. Der Import erfolgt wie am Anfang gezeigt.

Referenz

Packages in Python extension modules

Recommended Posts

Verschachteln Sie Module in Boost.Python
Nest Zahnrad in discord.py
Module und Pakete in Python sind "Namespaces"
Zusammenfassung der Module und Klassen in Python-TensorFlow2-
Schreiben Sie mit f2py ein Python-Modul in fortran