Importation fonction C++ dans le programme en Python
Je suis en train d'expérimenter avec des fonctions python droit maintenant. J'ai trouvé un moyen d'importer des fonctions python en c/c++ code, mais pas l'inverse.
J'ai un programme c++ écrit et il a une certaine fonction en elle. Je voudrais à "importer" le compilé un programme c++ dans mon script python et l'appel de la fonction c++.
Pour des raisons de simplicité, dire que la fonction c++ est aussi simple que:
int square(x)
{
return x*x;
}
et le programme compilé est nommé Cprog.
J'aimerais que mon script python pour être quelque chose comme:
import Cprog
print Cprog.square(4)
Est-ce possible? J'ai cherché sur internet sans succès et j'espère que l'une de vous peut-gourous ont une façon intelligente d'aller à ce sujet...
- Avez-vous essayé de Boost::Python?
- Non, je n'ai pas. Mais on dirait qu'il pourrait faire ce que je veux. Je suis à la recherche pour le moment. Merci beaucoup! Quelqu'un sait moins compliqué de le faire bien (sans l'usage d'une troisième roue du module)?
- Double Possible de l'Appel de C/C++ à partir de Python?
Vous devez vous connecter pour publier un commentaire.
Ici est un peu de travail à l'achèvement de l'exemple simple ci-dessus. Bien que le fil est vieux, je pense qu'il est utile d'avoir un simple tout-embrassant guide pour les débutants, car j'ai aussi eu des problèmes avant.
function.cpp contenu (extern "C" utilisé afin de ctypes module peut gérer la fonction):
wrapper.py contenu:
Ensuite compiler le function.cpp fichier (en utilisant mingw par exemple):
Ensuite de créer les bibliothèques d'objets partagés avec la commande suivante (note: pas partout sont vides):
Puis exécutez le wrapper.py le programme devrait fonctionner.
Si vous construisez votre programme en tant que bibliothèque partagée/DLL, vous pouvez utiliser ctypes l'appeler.
Vous voulez étendre python avec un C/C++ module. La suite de la documentation Python est un bon endroit pour commencer la lecture: http://docs.python.org/extending/extending.html
Vous devez créer un module python avec la fonction en elle. Il existe trois façons principales:
Ce pdf couvre 1 et 2. Cette page va vous expliquer comment utiliser Boost::Python.
Vous ne pouvez pas (facilement) l'utilisation d'une fonction dans un programme c/c++ - il doit être dans une bibliothèque statique (que vous pouvez également lier votre programme c/c++ contre).
MODIFIER -
Cython Est aussi mérite une mention.
Il ya beaucoup de façons différentes pour envelopper le code C++ pour être utilisé en Python. La plupart sont répertoriés sur le wiki Python ici.
J'ai trouvé un décemment moyen facile à automatiser, il est à utiliser py++ pour générer automatiquement les couvertures, puis compilez les fichiers générés. Mais ce qui est plus approprié pour les grands projets où emballage tout à la main est tout simplement pas très faisable et serait la cause d'une maintenance cauchemar.