Intégrationt scripts Python

Résolu
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 - 28 févr. 2012 à 23:24
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 - 29 févr. 2012 à 17:52
Bonsoir à tous,

Je souhaiterais savoir comment on fait pour pouvoir utiliser des scripts Python dans son programme C++. J'ai trouvé un tutoriel sur le SDZ mais hélas le compilateur me renvoi une erreur, donc j'en conclut que le tuto n'est pas valable. Quelqu'un aurait un lien s'il vous plaît ?


Merci d'avance.

16 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
29 févr. 2012 à 15:41
Le problème est que je n'ai pas libpython32.a sinon je m'en servirait ;)

Sur le lien que je t'ai donné (en anglais), il était mentionné que ce fichier était fourni. C'est pour cela que je t'ai proposé cette solution. D'après la doc, ce fichier n'est plus fourni automatiquement depuis la version 3 (pas de chance ^^).
Apparamment, il y en a un ici:
http://adelaiderunner.com/pPython_3.2.1.1/App/libs/libpython32.a

Ça peut valoir le coup de tester, non ?

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
3
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
29 févr. 2012 à 16:02
C'est bon ça marche, alors en fait pour ceux qui prennent la version 64-bits, libpython32.a n'est pas fourni. Là en passant sur la version 32-bits, pas de soucis ça marche. Problème donc résolu, mais dommage qu'ils fournissent pas pour les 64-bits.
3
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
29 févr. 2012 à 11:43
Bonjour.

Boost propose un interfaçage entre Python et le C++ (dans les deux sens):
http://www.boost.org/doc/libs/1_49_0/libs/python/doc/tutorial/doc/html/index.html

Quel était le lien dont tu parlais ? Il est rare que le SdZ laisse des tutoriaux faux.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
29 févr. 2012 à 11:48
Voici le lien : http://www.siteduzero.com/tutoriel-3-191941-introduction-au-scripting-avec-python.html

Le tuto est pour dev-cpp, moi j'utilise codeblocks mais le problème n'est pas là. Après avoir configuré codeblocks, je me retrouver avec l'erreur :
D:/prog/cpp/python/main.cpp:8: undefined reference to `_imp__Py_Initialize'


Et voici le code concerné :
#include 
#include 

using namespace std;

int main (int argc, char *argv[])
{
    Py_Initialize();

    return 0;
}


Rien de spécial, j'initialise seulement Python et déjà ça flanche.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
29 févr. 2012 à 11:51
Je viens de regarder ton lien, le problème c'est que c'est pour une veille version de Python, moi j'utilise la version 3.2.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
29 févr. 2012 à 12:08
boost 1.49 date de ce mois-ci, donc je doute fortement qu'il ne gère pas python 3.2 ^^

J'ai testé ceci chez moi:
#include 
#include 

void exec(const char* commandes)
{
  PyRun_SimpleStringFlags(commandes, 0);
}

int main()
{
  Py_Initialize();
  exec("print('test')");

  exec("a=3\n\
print(str(a))");

  exec("b=5");
  exec("print(str(b))");

  return 0;
}


Compilé avec:
 g++ -W -Wall toto.cc -lpython3.2


Et ça fonctionne nickel (Je suis sous Linux). À voir si tu "link" bien la bibliothèque python. Quelles sont les options de link de ta ligne de compilation ?

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
29 févr. 2012 à 13:16
J'en ai aucune idée vu que je passe par codeblocks. Là je suis sous Windows (je doute pas que j'aurais pas de soucis sous Linux cela dit). Le truc c'est que les lib c'est des .lib donc pour MSVC mais codeblocks et mingw les gèrent normalement.

Je me permet de te renvoyer sur ma demande d'aide sur le SDZ où j'ai posté des screens : http://www.siteduzero.com/forum-83-742438-p1-integre-python.html#r7150820 ce qui va plus vite que de devoir les remettre ici ;)
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
29 févr. 2012 à 13:29
Je ne connais pas bien Code::Block (je n'ai utilisé que QtCreator sous Windows, et sinon je suis sous emacs sur un environnement Linux).
D'après ce que je vois dans tes screenshots, rien de choquant. Ça me parait correcte.

En revanche, es-tu absolument sur que le fichier python32.lib est bien compatible avec mingw ? J'ai vu trainer un site: http://python-mingw.donbennett.org:8081/mywiki/

Je n'ai pas Windows sous la main, mais je ferais le test en rentrant chez moi ce soir (impossible de t'aider plus sans avoir l'environnement pour tester ^^).

(Idée à la con, ne sais-t-on jamais: Essaie de mettre un chemin absolu dans "linker settings", peu probable, mais bon...)
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
29 févr. 2012 à 13:52
Compatible oui obligatoirement puisque le tuto du SDZ c'est dev-cpp qui est utilisé et lui même utilise MingW (seul compilateur qu'il accepte alors que codeblocks lui gère aussi d'autres dont un de MS).

Je viens de tenter avec un chemin absolue mais comme toi ça me paraissait peu probable et en effet ça ne fonctionne pas mieux. Le problème vient peut être du fait de la séparation entre le compilo et l'emplacement des libs Python, mais je ne sais pas si en copiant dans le compilo au bon endroit les libs Python (.h, .dll et .lib) si ça fonctionnera ou non (normalement oui en toute logique mais bon en toute logique la séparation pose pas de soucis donc).

Je testerais tout à l'heure, ben sinon tan pis pas de programmes utilisant Python sous Windows (ça ferait ***** quoi).


Sous Linux je ne doute pas que ça fonctionne à merveille, mais j'ai besoin de compiler sur les deux plateformes et jamais réussi à faire de la cross-compilation fonctionnelle donc bon ;)
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
29 févr. 2012 à 14:01
Le problème vient peut être du fait de la séparation entre le compilo et l'emplacement des libs Python, mais je ne sais pas si en copiant dans le compilo au bon endroit les libs Python (.h, .dll et .lib) si ça fonctionnera ou non (normalement oui en toute logique mais bon en toute logique la séparation pose pas de soucis donc).

La séparation ne pose pas de problème.

Autre idée. Est-ce que dans "linker settings" tu pourrais indiquer Python32.dll au lieu de Python32.lib ?
Si ça ne fonctionne pas, tente avec "libpython32.a".

Ils en parlent ici (en anglais):
http://stackoverflow.com/questions/6731100/link-to-python-with-mingw

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
29 févr. 2012 à 15:08
Le problème est que je n'ai pas libpython32.a sinon je m'en servirait ;) Sous windows se sont des .lib donc prévu à l'origine pour MSVC (hélas).

Pour ce qui est de python3.dll (j'ai pas python32.dll), c'est comme je le pensais un format inconnu pour MingW, normale contrairement à gcc et g++ sous linux qui sont capable de travailler directement avec des .so, sous windows il n'est pas capable de travailler avec des .dll et doit donc passer par du .a ou .lib (qui est l'équivalent MSVC).

Pour ce qui est de ton lien, je ne peux même pas tester vu que j'ai pas la commande grep, elle n'est pas fournie avec mingw.
0
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
29 févr. 2012 à 15:48
Je peux toujours tenter mais c'est la version 3.2.1 et j'ai la 3.2.2, donc je ne pourrais bénéficier des derniers changements, mais si au moins je peux déjà faire quelques trucs se serait cool lol.


Je viens de voir le test, ça compile cool, merci de ton aide. C'est déjà une bonne chose, reste plus qu'à savoir si je peux exécuter des commandes simples (pour commencer ;) ).
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
29 févr. 2012 à 15:51
Je peux toujours tenter mais c'est la version 3.2.1 et j'ai la 3.2.2,

Il te reste à faire un truc super chiant dans ce cas: Tu fais comme moi, tu fouilles à l'aide de ton moteur de recherche préféré, si quelqu'un aurait déjà crée un libpython32.a pour la version 3.2.2 :)
(Pas facile à trouver, mais sûrement possible).

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
29 févr. 2012 à 15:51
Rectification, je ne peux pas me servir de ce fichier, il faut avoir python32.dll, hors mon installation ne comprend que python3.dll qui semble différent vu que en renommant il trouve pas le point d'entrée. Donc on va devoir réussir à trouver la bonne version.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
29 févr. 2012 à 16:44
Effectivement, vraiment dommage de ne pas avoir mis les versions 64 bits aussi !

N'oublie pas d'indiquer où tu as trouvé le bon libpython32.a, ça pourrait servir à d'autre :) (Lien ?)
Mets aussi le sujet à jour sur le SdZ, ça pourrait aussi servir.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
29 févr. 2012 à 17:52
Je l'ai pas trouvé, je suis juste aller sur le site officiel de python (http://www.python.org) et j'ai téléchargé la version 32bits au lieu de prendre la 64bits comme j'avais fait. Tout simplement, mais il ma fallut retourner le web pour trouver un message d'une personne disant qu'elle avait pas vu qu'il fallait prendre le premier lien, sachant que le premier c'est la version 32bits et le second la 64bits lol.

Mais en tout cas, merci à toi de m'avoir aiguiller, car tu m'aurais pas parlé de libpython32.a, j'aurais pas fait une recherche sur ce nom et j'aurais pas eu la solution.
0
Rejoignez-nous