Modules Nest dans Boost.Python

Chose que tu veux faire

Créez un module dans Boost.Python avec une structure équivalente au module Python (peut-être un package pour être exact) ci-dessous.

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

L'importation est

import mainmodule
from mainmodule.submodule1 import hogehoge  # mainmodule/submodule1/hoge.hogehoge est défini dans py
from mainmodule import submodule2

Ce sera comme ça.

Qui est la cible de cet article

Cet article décrit une utilisation assez compliquée de Boost.Python. Par conséquent, il est destiné aux personnes qui ont utilisé Boost.Python au moins une fois.

Si vous n'avez pas utilisé Boost.Python mais que cela vous intéresse, cliquez ici letsboost :: python --Kmonos.net Veuillez préparer.

Source d'informations sur ce que vous voulez faire

Je trouve souvent un moyen d'imbriquer des classes, mais je n'ai pas trouvé d'imbrication de modules, alors prenez note. Page d'origine Packages dans les modules d'extension Python

Comment faire

Je pense que c'est plus rapide de voir le code source, donc c'est soudainement le code source.

Déclarez le module le plus à l'extérieur.

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

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

    export_submodule1();
    export_submodule2();
        :
}

Une fonction qui déclare un sous-module

void export_submodule1() {
    using namespace boost::python;
    // from mainmodule.submodule1 Permet d'être appelé sous forme d'import
    object module(handle<>(bp::borrowed(PyImport_AddModule("mainmodule.submodule1"))));
    //à partir du module principal d'importation, le submodule1 peut être utilisé
    scope().attr("submodule1") = module;
    //Définir la portée
    scope scope1 = module;
    //Définir diverses fonctions et classes nécessaires
    def("hogehoge", &hogehoge);
        :
}

Comment utiliser

Il peut être utilisé comme un module Python normal, il n'y a donc pas d'explication spécifique. L'importation est comme indiqué au début.

référence

Packages in Python extension modules

Recommended Posts

Modules Nest dans Boost.Python
nest cog dans discord.py
Les modules et packages en Python sont des "espaces de noms"
Résumé des modules et des classes dans Python-TensorFlow2-
Ecrire un module python dans fortran en utilisant f2py