[Python] le .exe généré ne marche pas

Résolu/Fermé
darkneurone Messages postés 39 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 12 juin 2008 - 5 janv. 2008 à 18:38
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - 23 mars 2008 à 21:51
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.
A voir également:

13 réponses

darkneurone Messages postés 39 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 12 juin 2008 12
6 janv. 2008 à 12:30
petit Up !
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
7 janv. 2008 à 09:09
Essai en le renommant en .py pour avoir la console.
Comme ça tu verra les erreurs éventuelles dans la console.
0
darkneurone Messages postés 39 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 12 juin 2008 12
7 janv. 2008 à 19:42
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.
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
7 janv. 2008 à 21:02
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 ?
0

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

Posez votre question
darkneurone Messages postés 39 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 12 juin 2008 12
7 janv. 2008 à 22:08
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.
0
darkneurone Messages postés 39 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 12 juin 2008 12
12 janv. 2008 à 15:01
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.
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
12 janv. 2008 à 22:41
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.
0
darkneurone Messages postés 39 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 12 juin 2008 12
22 mars 2008 à 18:14
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 ! ^^
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
22 mars 2008 à 20:11
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.
0
darkneurone Messages postés 39 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 12 juin 2008 12
22 mars 2008 à 20:25
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 !
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
23 mars 2008 à 00:51
py2exe a bien marché chez moi, et aussi cx_freeze.
0
darkneurone Messages postés 39 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 12 juin 2008 12
23 mars 2008 à 20:59
c'est étrange ! Chez moi, si j'utilise l'option bundle files à 1 (pour n'obtenir qu'un fichier), mon .exe ne fait rien ^^ alors que si je retire l'option... tout marche très bien :/

J'ai utilisé NSIS pour résoudre le problème :)

Merci encore !
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
23 mars 2008 à 21:51
De rien ! :-)
0