Appeler C / C ++ depuis Python sur Mac

Ceci est le premier message. J'ai récemment demandé à toucher Python, mais c'est lent. Mais quand j'ai dû l'écrire en Python, j'ai demandé: "Je devrais l'appeler C!?" Mais cela n'a pas fonctionné comme je l'ai fait dans les articles écrits par d'autres. Je me demandais si la référence ou quelque chose n'allait pas, mais j'ai fait une note parce qu'elle bougeait quand je la déplaçais de force.

Aperçu

Il semble que vous devriez utiliser celui appelé ** Boost.Python **. Je ne pouvais pas parcourir la bibliothèque, alors je les ai tous mis dans un même répertoire et les ai déplacés.

environnement

macOS 10.13.6 Python 3.7 BoostPython 1.68.0

Préparez ce dont vous avez besoin

J'ai préparé un répertoire * pour exécuter ce programme. Je pense que ça peut être n'importe où, mais j'ai choisi ~ / Python / BoostPythonTest /. Préparez les éléments suivants ici.

libboost_python37.dylib Installez Boost.Python ci-dessous. [^ 1]

% brew install boost-python3

Une fois installé, vous devriez avoir / usr / local / Cellar / boost-python3 / 1.68.0 / lib / libboost_python37.dylib, copiez-le dans le * répertoire courant *.

libpython3.7.dylib Installez Python. [^ 1]

% brew install python3

Copiez / usr / local / Cellar / python / 3.7.2 / Frameworks / Python.framework / Versions / 3.7 / Python dans le * répertoire en cours * et renommez-le en libpython3.7.dylib.

Source C / C ++

J'ai préparé une source appelée hello.cpp pour les tests.

hello.cpp


#include <boost/python.hpp>
#include <stdio.h>

char greet(int x){
    printf("printHELLO!!\n");
    return '0' + x + 1;
}

char const* fine(){
    return "How are you?";
}

BOOST_PYTHON_MODULE(hello){
  using namespace boost::python;
    def("greet", greet);
    def("fine", fine);
}

Source Python

J'ai préparé une source appelée test.py pour les tests.

test.py


import hello
x = hello.greet(2)
print(x)
y = hello.file()
print(y)

compiler

Vous devriez pouvoir compiler avec: Recherchez simplement les fichiers dans le * répertoire en cours d'exécution *.

% g++ -fPIC -Wall -O2 -shared -o hello.so hello.cpp libboost_python37.dylib libpython3.7.dylib

hello.so est créé dans le * répertoire d'exécution *.

Courir

Essayez de l'exécuter.

% python3 test.py
printHELLO!!
3
How are you?

Cela semble être fait correctement.

Résumé

C'était un peu une méthode de force brute pour tout mettre dans un répertoire et le déplacer, mais cela a fonctionné pour le moment, alors faisons-le.

J'ai essayé de l'exécuter sur Ubuntu, mais je n'ai pas pu. J'utilise dylib, donc cela semble inutile à moins que ce ne soit un Mac.

référence

[1] Enveloppez c / c ++ pour qu'il puisse être utilisé en python https://www.quark.kj.yamagata-u.ac.jp/~hiroki/python/?id=19

[2] De l'installation de boost à l'exécution (boost :: python). http://nonbiri-tereka.hatenablog.com/entry/2014/02/01/004547

[^ 1]: Si vous obtenez une erreur d'autorisation lors de l'utilisation de brew, faites sudo brew ....

Recommended Posts

Appeler C / C ++ depuis Python sur Mac
Appeler C depuis Python avec DragonFFI
Appeler popcount depuis Ruby / Python / C #
python sur mac
Appeler le langage C depuis Python (python.h)
Mettre à jour Mac Python de 2 à 3
Installez Python sur Mac
Installer Python 3 dans un environnement Mac
Installez Python 3.4 sur Mac
Appel de scripts Python à partir de Python intégré en C ++ / C ++
Appeler CPLEX depuis Python (DO cplex)
Installer pygame sur python3.4 sur Mac
Manipulation de python sur mac
Mettez à jour le python que vous aviez sur votre Mac à 3.7-> 3.8
Installez pandas 0.14 sur python3.4 [sur Mac]
Remarques sur l'installation de Python sur votre Mac
Préférences pour générer des GIF animés à partir de Python sur Mac
[Python] Comment appeler une fonction de c depuis python (édition ctypes)
Appelez Matlab depuis Python pour optimiser
Appeler des fonctions du langage C depuis Python pour échanger des tableaux multidimensionnels
Construire un environnement Python sur Mac
Remarques sur l'utilisation de MeCab depuis Python
Créer un environnement Python sur Mac (2017/4)
Mémo de construction de l'environnement Python sur Mac
Installez Python 3.7 Anaconda sur MAC, mais Python 2
Appeler le code généré par Cython à partir de C / C ++ (version Mac)
Installer python3 sur Mac (El Capitan)
Conseils pour appeler Python à partir de C
Exécuter du code Python à partir de l'interface graphique C #
Construire un environnement pour python3.8 sur Mac
Exécutez des scripts Python de manière synchrone à partir de C #
Remarques sur l'accès à dashDB à partir de python
Appelez python de nim avec Nimpy
Si l'installation de Python 3.5.0 échoue sur Mac
Étapes pour installer python3 sur Mac
Comment reconstruire l'environnement python à partir de pyenv dans un environnement Mac (El Capitan)
Installez mecab sur le serveur partagé Sakura et appelez-le depuis python
Installez lp_solve sur Mac OSX et appelez-le avec python.
Appelez votre propre bibliothèque partagée en langage C à partir de Python à l'aide de ctypes
Exécuter du code Python sur C ++ (en utilisant Boost.Python)
Créez un environnement python sur votre Mac
Chase des applications actives sur Mac avec Python
[C] [python] Lire avec AquesTalk sous Linux
Comment effacer Python 2.x sur Mac.
Connexion de python à MySQL sur CentOS 6.4
Remarques sur la construction de Python et pyenv sur Mac
Créer un environnement Python avec Anaconda sur Mac
Générer un langage C à partir d'une expression S avec Python
Appeler des commandes depuis Python (édition Windows)
Exécutez Python en C ++ sur Visual Studio 2017
Langage C pour voir et se souvenir de la partie 2 Appeler le langage C à partir de la chaîne Python (argument)
Python sur Windows
twitter avec python3
sql à sql
Langage C pour voir et se souvenir de la partie 1 Appeler le langage C depuis Python (bonjour le monde)
notes de python C ++
python, openFrameworks (c ++)
MeCab de Python