Conseils aux débutants en Python pour utiliser l'exemple Scikit-image pour eux-mêmes 9 Utilisation à partir du langage C

À travers la série jusqu'à présent, l'exemple (Note 2) dans scikit-image Bouge comme ça, Modifier le fichier d'entrée, Gérer plusieurs fichiers d'entrée Ecrivez le résultat dans un fichier Utiliser l'interface graphique Lien avec le réseau Améliorer le code et Réutiliser comme module Mesure et profilage du temps de traitement a été affiché.

Une fois que vous l'aurez maîtrisé jusque-là, vous voudrez probablement l'utiliser à partir du langage C / C ++ la prochaine fois.

Donc cette fois, je vais vous présenter comment utiliser Python à partir du langage C / C ++.

Utiliser Python à partir du langage C / C ++

** 1. Utilisation de la fonction système et de la fonction popen **

script python avec fonction system () system("python myscript.py"); Ce faisant, Python peut être utilisé à partir du langage C. fp=popen("python myscript.py","r"); En conséquence, vous pouvez recevoir le résultat ainsi que l'exécuter.

Pour le moment, cette méthode peut être réalisée sans difficulté tant que vous pouvez utiliser le langage C.

Les défis de cette méthode: Chaque fois que le processus est exécuté, l'interpréteur python est lancé par le système ou popen, ce qui entraîne une surcharge. De plus, si le script Python à exécuter a besoin de lire le fichier entraîné en préparation du traitement, la surcharge devient très importante.

** 2. Intégration de Python dans d'autres applications **

Documentation standard de Python [Intégration de Python dans d’autres applications] (http://docs.python.jp/2/extending/embedding.html)

Documentation standard Python 5.3. Pure embedding

Le programme sert à exécuter les fonctions dans le script Python.

Cette approche ne génère pas de processus supplémentaires. Vous pouvez passer un argument à la partie Python intégrée et recevoir le résultat.

PyImport_Import(pName) Le nom du module lu Dans cet exemple, nous donnons ici le nom du module python et exécutons les fonctions contenues dans ce module. (Pour être précis, il semble que Python spécifie le nom du module à importer et appelle le module (.py, .pyc, .pyd, etc.) dans le répertoire courant en fonction du paramétrage de son PYTHONPATH. Si vous incluez une structure de répertoire telle que "$ call ../multiply multipliez 3 2" dans l'argument de cet exemple, PyImport_Import () échoue. )

Augmenter le nombre de fonctions incluses dans le module Vous pouvez faire ce qui suit:

.py:intmath.py


def multiply(a,b):
    print "Will compute", a, "times", b
    c = 0
    for i in range(0, a):
        c = c + b
    return c

def add(a,b):
    print "Will compute", a, " plus ", b
    return a+b

def div(a,b):
    print "Will compute", a, " div ", b
    return a/b

Résultat d'exécution

.txt:Résultat d'exécution.txt


>call.exe intmath div 5 2
Will compute 5  div  2
Result of call: 2
2

>call.exe intmath multiply 6 3

Will compute 6 times 3
Result of call: 18
18

>call.exe intmath add 6 3
Will compute 6  plus  3
Result of call: 9
9

>

Cela peut aussi être fait comme ça.

Cet exemple est très dangereux car il ne vérifie pas les valeurs entrées à partir de la ligne de commande.

Vous pouvez convertir des objets Python en structures de données en langage C comme suit: long PyInt_AsLong(PyObject *io) http://docs.python.jp/2/c-api/int.html

double PyFloat_AsDouble(PyObject *pyfloat) http://docs.python.jp/2/c-api/float.html

En l'incorporant de cette manière et en l'utilisant à partir du langage C, il est possible d'éliminer la surcharge de démarrage de l'interpréteur python et de répéter la terminaison avec les fonctions system () et popen (). De plus, il convient de noter Py_Initialize(); pModule = PyImport_Import(pName); Py_Finalize(); Il est également important de vous assurer que vous n'exécutez que lorsque vous en avez vraiment besoin.

effet: Le côté langage C / C ++ a l'avantage que peu importe la façon dont l'implémentation du module Python change, il n'est pas nécessaire de le reconstruire, tant que l'interface du module appelant, de la fonction, de l'argument et de la valeur de retour ne change pas.

J'étudie toujours [Note 1].

Dans l'exemple de programme de 5.3. Pure embedding Puisque les arguments de fonction et les valeurs de retour sont de types entiers, créons un programme qui les remplace simplement par des points flottants.

L'écriture d'un programme intégré nécessite une bonne compréhension de Python et C, et peut nécessiter une obsession pour le faire fonctionner. Il est assez inhabituel d'avoir un programmeur Python capable de maîtriser l'incorporation de Python simplement parce que vous avez un utilisateur Python autour de vous. Alors, écrivons un programme qui a été légèrement réécrit et essayons de l'imiter.

** Addendum: lorsque vous ne pouvez pas construire en mode débogage **

LINK : fatal error LNK1104: cannot open file 'python27_d.lib' Est affiché dans Visual Studio. Comment utiliser python27.lib en mode Release et en mode Debug comme suit stackoverflow C'était écrit.

#ifdef _DEBUG
  #undef _DEBUG
  #include <Python.h>
  #define _DEBUG
#else
  #include <Python.h>
#endif

Remarque: lors de l'utilisation de Python intégré, j'ai essayé d'afficher le processus avec le gestionnaire de tâches. Même lorsque j'ai essayé d'exécuter la partie module Python, j'ai pu confirmer que le processus de python.exe n'a pas été créé. Si vous utilisez la commande système ou popen, essayez l'intégration car vous n'aurez pas à répéter le démarrage de Python et les paramètres initiaux dans le script plusieurs fois.


Choses à écrire, etc. Boost.Python C ++ intégré dans Python avec Scipy.Weave Cython Numpy C-API Scipy Python Types and C-Structures

Remarque 1: lorsque vous augmentez le nombre de bibliothèques à lier avec C / C ++, "Cette bibliothèque a besoin de cette bibliothèque, cette bibliothèque a besoin d'une bibliothèque supplémentaire, et si vous ne la liez pas, la partie qui était jusqu'à présent sera construite. Je ne peux même pas le faire. " Cela a tendance à être une situation triste. Dans le cas de l'incorporation de Python dans le langage C / C ++, le lien est écrit ici #include <Python.h> Un module qui contient une ligne de. Cette partie est le pont entre le langage C / C ++ et le langage Python. Le reste du langage Python n'est pas lié. C'est pourquoi vous pouvez donner le nom du module à importer dans l'exemple de programme C en tant qu'argument de ligne de commande. Il suffit d'avoir un interpréteur Python et une gamme de bibliothèques Python installées. "Ce module, ce module et quel module" C'est aussi bien de pouvoir empêcher une augmentation sans fin du nombre d'objets à lier.

Remarque: dans le cas de Visual Studio sous Windows, il est spécifié qu'il ne peut pas être lié si la version du compilateur change. Cela peut être délicat lors de la création d'énormes bibliothèques comme OpenCV. Lors de la génération d'une bibliothèque pour Python à partir de l'extension C / C ++, langage Cython, la version de Visual Studio doit être la même.

Note 2: La raison du choix de l'exemple dans Scikit-image est que cela ne pose pas le problème de "où dois-je obtenir les données nécessaires?" Lors de l'exécution de l'exemple.

Recommended Posts

Conseils aux débutants en Python pour utiliser l'exemple Scikit-image pour eux-mêmes 9 Utilisation à partir du langage C
Conseils aux débutants en Python pour utiliser l'exemple Scikit-image par eux-mêmes
Conseils aux débutants en Python pour utiliser l'exemple Scikit-image pour eux-mêmes 6 Améliorer le code Python
Conseils aux débutants en Python pour utiliser l'exemple Scikit-image pour eux-mêmes 2 Traiter plusieurs fichiers
Conseils aux débutants en Python pour utiliser l'exemple Scikit-image pour eux-mêmes 7 Comment créer un module
Conseils aux débutants en Python pour utiliser l'exemple Scikit-image pour eux-mêmes 8 Mesure du temps de traitement et profileur
Conseils aux débutants en Python pour utiliser l'exemple Scikit-image pour eux-mêmes 4 Utiliser l'interface graphique
Conseils aux débutants en Python pour utiliser l'exemple Scikit-image pour eux-mêmes 3 Écrire dans un fichier
Conseils aux débutants en Python pour utiliser l'exemple Scikit-image pour eux-mêmes 5 Incorporer dans les applications réseau
~ Conseils pour les débutants de Python présentés avec amour par Pythonista ③ ~
Conseils pour appeler Python à partir de C
Comment utiliser la bibliothèque C en Python
Le moyen le plus rapide pour les débutants de maîtriser Python
Conseils pour manipuler numpy.ndarray à partir de c ++ -Je veux utiliser un itérateur-
Envelopper C avec Cython pour une utilisation à partir de Python
~ Conseils pour les débutants de Python donnés avec amour par Pythonista ① ~
Envelopper C ++ avec Cython pour une utilisation à partir de Python
~ Conseils pour les débutants de Python donnés avec amour par Pythonista ② ~
[Pour les débutants] Comment utiliser la commande say avec python!
Je voulais utiliser la bibliothèque Python de MATLAB
[python] Comment utiliser Matplotlib, une bibliothèque pour dessiner des graphiques
[Pour les débutants] Script dans 10 lignes (4. Connexion de python à sqlite3)
Je ne savais pas comment utiliser l'instruction [python] for
Utilisez un langage de script pour une vie C ++ confortable-OpenCV-Port Python vers C ++ -
Transmettez les données OpenCV de la bibliothèque C ++ d'origine à Python
Utilisez l'API Flickr de Python
Web scraping pour les débutants en Python (1)
Web scraping pour les débutants en Python (4) -1
[Introduction à Python] Comment utiliser l'opérateur in dans l'instruction for?
[Python] Explique comment utiliser la fonction format avec un exemple
Je veux utiliser jar de python
[Python] Organisation de l'utilisation des instructions
Python> Numéros de sortie de 1 à 100, 501 à 600> Pour csv
Comment utiliser "deque" pour les données Python
Utilisation des fonctions C ++ de python avec pybind11
Une introduction à Python pour les programmeurs en langage C
[Python] Explique comment utiliser la fonction range avec un exemple concret
[Exemple d'amélioration de Python] Quel est le site d'apprentissage recommandé pour les débutants en Python?
Procédure du développement AWS CDK (Python) à la construction de ressources AWS * Pour les débutants
Comment utiliser MkDocs pour la première fois
Python pour les super débutants Super débutants Python # Facile à éliminer
Étude de Python Hour7: Comment utiliser les classes
Conseils pour ceux qui ne savent pas comment utiliser is et == en Python
Spécifiez le fichier exécutable Python à utiliser avec virtualenv
Mémo n ° 3 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Utilisez Logger avec Python pour le moment
[Bash] Obtenez la puissance de python de bash en utilisant la documentation ici
Mémo n ° 1 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Comment utiliser les outils d'analyse de données pour les débutants
Conseils pour accéder à l'API ATND avec Python
Utilisez PIL en Python pour extraire uniquement les données souhaitées d'Exif
Le moyen le plus simple d'utiliser OpenCV avec python
Essayez de calculer RPN avec Python (pour les débutants)
[Algorithm x Python] Comment utiliser la liste
Utilisez le framework Python "cocotb" pour tester Verilog.
Mémo n ° 2 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Je veux utiliser le solveur ceres de python
Mémo n ° 7 que les débutants Python lisent "Explication détaillée de la grammaire Python"
[Astuces Python] Comment récupérer plusieurs clés avec la valeur maximale du dictionnaire
Je veux créer du code C ++ à partir de code Python!