[Python] le .exe généré ne marche pas
Résolu
darkneurone
Messages postés
39
Date d'inscription
Statut
Membre
Dernière intervention
-
sebsauvage Messages postés 32893 Date d'inscription Statut Modérateur Dernière intervention -
sebsauvage Messages postés 32893 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour à tous,
j'essaye d'obtenir un .exe de mon script python à l'aide de py2exe. Tout ce passe bien au niveau de la création du .exe, mais lorsque je l'exécute, mon programme ne marche pas... les modules que j'utilise dans mon script python sont : pyhook et pythoncom.
voilà le code de mon setup.py :
import py2exe
from distutils.core import setup
setup(windows = ["mon_programme.pyw"],
options = {"py2exe": {"optimize": 2,
"bundle_files": 1,
"compressed": 1}},
zipfile = None)
Mon script python s'appelle : mon_programme.pyw
Ce qui est étonnant c'est qu'aucune erreur n'apparait lors de la création du .exe et de son exécution ! le .exe ne fait tout simplement rien.. En revanche, mon_programme.pyw s'exécute sans erreur, et tout marche parfaitement !
NB : dans mon script python, j'ouvre des fichiers .txt, que j'ai créé au préalable avec la fonction open en méthode 'a+', et j'écris dans ceux ci avec la fonction write.
j'essaye d'obtenir un .exe de mon script python à l'aide de py2exe. Tout ce passe bien au niveau de la création du .exe, mais lorsque je l'exécute, mon programme ne marche pas... les modules que j'utilise dans mon script python sont : pyhook et pythoncom.
voilà le code de mon setup.py :
import py2exe
from distutils.core import setup
setup(windows = ["mon_programme.pyw"],
options = {"py2exe": {"optimize": 2,
"bundle_files": 1,
"compressed": 1}},
zipfile = None)
Mon script python s'appelle : mon_programme.pyw
Ce qui est étonnant c'est qu'aucune erreur n'apparait lors de la création du .exe et de son exécution ! le .exe ne fait tout simplement rien.. En revanche, mon_programme.pyw s'exécute sans erreur, et tout marche parfaitement !
NB : dans mon script python, j'ouvre des fichiers .txt, que j'ai créé au préalable avec la fonction open en méthode 'a+', et j'écris dans ceux ci avec la fonction write.
A voir également:
- Py.exe
- .Exe - Télécharger - Divers Utilitaires
- Svchost exe - Guide
- Citizen code python avis - Accueil - Outils
- Bat to exe converter - Télécharger - Édition & Programmation
- Winrar exe - Télécharger - Compression & Décompression
13 réponses
Essai en le renommant en .py pour avoir la console.
Comme ça tu verra les erreurs éventuelles dans la console.
Comme ça tu verra les erreurs éventuelles dans la console.
Merci pour m'avoir répondu !
J'ai donc renommé mon script principal en .py, et modifié en conséquence le setup.py, mais rien à faire. Aucune erreur ne s'affiche, et quand j'essaye de mettre un "print" dans la fonction qui est appelé lors de l'appui d'une touche du clavier (avec pyhook), il ne marche pas après avoir été converti en .exe ! En revanche, si je le place ne dehors de cette fonction, le print marche très bien..
je met le squelette de mon script .py :
import pyHook, pythoncom
def OnKeyboardEvent(event):
cle = str(event.Key)
if cle == "touche1":
...etc... que des instructions conditionnelles similaires
#test de print ici => ne marche pas dans le .exe mais fonctionne dans le .py
hk = pyHook.HookManager()
hk.KeyDown = OnKeyboardEvent
hk.HookKeyboard()
#print 'test' marche dans le script .py et dans le .exe
pythoncom.PumpMessages()
NB : Dans le setup.py j'ai aussi essayé de changer windows en console pour les différents cas... Ca ne marche pas.
J'ai donc renommé mon script principal en .py, et modifié en conséquence le setup.py, mais rien à faire. Aucune erreur ne s'affiche, et quand j'essaye de mettre un "print" dans la fonction qui est appelé lors de l'appui d'une touche du clavier (avec pyhook), il ne marche pas après avoir été converti en .exe ! En revanche, si je le place ne dehors de cette fonction, le print marche très bien..
je met le squelette de mon script .py :
import pyHook, pythoncom
def OnKeyboardEvent(event):
cle = str(event.Key)
if cle == "touche1":
...etc... que des instructions conditionnelles similaires
#test de print ici => ne marche pas dans le .exe mais fonctionne dans le .py
hk = pyHook.HookManager()
hk.KeyDown = OnKeyboardEvent
hk.HookKeyboard()
#print 'test' marche dans le script .py et dans le .exe
pythoncom.PumpMessages()
NB : Dans le setup.py j'ai aussi essayé de changer windows en console pour les différents cas... Ca ne marche pas.
Je pense qu'il y a des particularités quand on bricole avec COM.
As-tu regardé la doc de py2exe pourquoi s'il y avait quelquechose concernant Pythoncom ?
As-tu regardé la doc de py2exe pourquoi s'il y avait quelquechose concernant Pythoncom ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
En fait, j'ai trouvé ça : http://www.py2exe.org/index.cgi/Py2exeAndWin32com?highlight=%28win32%29
Mais le problème, c'est que je ne connais pas trop py2exe. Donc je ne vois pas trop comment faire.
De plus, je crois que dans le lien ci-dessus, lorsque l'on créé le .exe, il est accompagné de plusieurs fichiers alors que j'aimerai ne pas en avoir. C'est pour ça que j'utilise le setup.py ci-dessus.
Sinon j'ai trouvé une multitude d'autres post qui ont des problèmes avec pythoncom lié à py2exe, mais aucun n'obtient le même problème que moi.
Mais le problème, c'est que je ne connais pas trop py2exe. Donc je ne vois pas trop comment faire.
De plus, je crois que dans le lien ci-dessus, lorsque l'on créé le .exe, il est accompagné de plusieurs fichiers alors que j'aimerai ne pas en avoir. C'est pour ça que j'utilise le setup.py ci-dessus.
Sinon j'ai trouvé une multitude d'autres post qui ont des problèmes avec pythoncom lié à py2exe, mais aucun n'obtient le même problème que moi.
je remet à jour le sujet ! J'ai effectué quelques tests, et apparemment ce qui fait que mon .exe ne marche pas, c'est l'option "bundle_files": 1
Quand je la retire, je me retrouve avec pas mal de fichier en plus de mon .exe, mais il marche parfaitement... Est ce quelqu'un connait une alternative à py2exe afin que j'arrive à obtenir un seul et unique fichier .exe (sans aucun autre fichier à donner) pour pouvoir distribuer plus simplement mon programme ?
Je ne vois pas d'autres solutions.. Je me demande s'il est possible d'intégrer toutes les librairies directement dans mon script à la place d'utiliser import.. Peut-être que ça pourrait résoudre mon problème.
Quand je la retire, je me retrouve avec pas mal de fichier en plus de mon .exe, mais il marche parfaitement... Est ce quelqu'un connait une alternative à py2exe afin que j'arrive à obtenir un seul et unique fichier .exe (sans aucun autre fichier à donner) pour pouvoir distribuer plus simplement mon programme ?
Je ne vois pas d'autres solutions.. Je me demande s'il est possible d'intégrer toutes les librairies directement dans mon script à la place d'utiliser import.. Peut-être que ça pourrait résoudre mon problème.
Il y a quelques temps j'avais fait le tour des solutions disponibles:
https://sebsauvage.net/python/snyppets/index.html#py2exe
Certains vont même jusqu'à NSIS, mais bon.
https://sebsauvage.net/python/snyppets/index.html#py2exe
Certains vont même jusqu'à NSIS, mais bon.
Bonjour,
désolé je n'avais pas vu la réponse au message ! ^^
Le problème avec NSIS, c'est que ça créé des "installeurs". Je voudrais vraiment avoir un .exe seul. Si j'exécute un .exe créé par NSIS, ça m'affiche une sorte de fenêtre d'installation en exécutant le script .nsi. En revanche, s'il y a un moyen pour créer un .exe qui s'exécute normalement sans afficher de grosse fenêtre... ^^ je suis preneur ! j'aimerai bien que seul mon code python soit exécuté :S
Personne ne voit de solution ?
PS : j'ai testé la page que tu m'as envoyé sur py2exe, mais ça ne marche pas non plus :( C'est vraiment dommage, ça me ferait mal de devoir reprogrammer mon script python en C pour ne pas être confronter à ce problème... :(
Bonne journée à tous et encore désolé pour le temps de réponse ! ^^
désolé je n'avais pas vu la réponse au message ! ^^
Le problème avec NSIS, c'est que ça créé des "installeurs". Je voudrais vraiment avoir un .exe seul. Si j'exécute un .exe créé par NSIS, ça m'affiche une sorte de fenêtre d'installation en exécutant le script .nsi. En revanche, s'il y a un moyen pour créer un .exe qui s'exécute normalement sans afficher de grosse fenêtre... ^^ je suis preneur ! j'aimerai bien que seul mon code python soit exécuté :S
Personne ne voit de solution ?
PS : j'ai testé la page que tu m'as envoyé sur py2exe, mais ça ne marche pas non plus :( C'est vraiment dommage, ça me ferait mal de devoir reprogrammer mon script python en C pour ne pas être confronter à ce problème... :(
Bonne journée à tous et encore désolé pour le temps de réponse ! ^^
NSIS peut être configuré pour ne rien afficher: il décompacte tout dans un répertoire temporaire, exécute le programme, et efface automatiquement les fichiers à la fin du programme.
Ça peut donc très bien remplir le rôle.
Ça peut donc très bien remplir le rôle.
aaaah !!! merci beaucoup ^^ je vais regarder tous les tutoriaux alors ;) je n'avais suivi que le premier !
Je met comme résolu, merci encore et bonne soirée !
Je met comme résolu, merci encore et bonne soirée !