IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Déploiement/Installation Python Discussion :

Génération d'un .exe


Sujet :

Déploiement/Installation Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 32
    Points : 36
    Points
    36
    Par défaut Génération d'un .exe
    Bonjour,
    J'ai créé un programme avec Python et j'aimerai bien le transformer en .exe.

    J'ai regardé py2exe et cx_Freeze mais j'ai un problème:
    Mon programme est découpé en plusieurs fichiers .py:
    > Mon_programme.py
    > Modules.py
    > Classes.py

    J'ai ensuite des dossiers avec des données utiles à mon programmes:
    > Data
    >> Dossier 1
    >>> Fichiers images
    >> Dossier 2
    >>> Fichiers images
    >> Fichiers images, sons, textes

    > Annexe
    >> Perso
    >>> Fichiers textes
    >> Fichiers textes

    Toutes les données contenus dans Data servent juste à "l'esthétique" du programme. Dans Annexe, j'ai des fichiers textes contenant des infos et dans Annexe > Perso j'ai des fichiers texte que je peux générer depuis le programme.

    Je ne comprend pas vraiment comment je doit indiquer au générateur de .exe le fait de prendre en compte les multiple .py (qui interagissent ensembles) et mes dossiers et fichiers utiles au bon fonctionnement.
    Je ne sais pas non plus si la génération de fichier textes au sein d'un des dossier sera toujours possible (je pense que oui).

    J'utilise également la bibliothèque pygame en plus de certaine bibliothèque standard.

    Voilà, si quelqu'un pourrais donc m'indiquer comment utiliser py2exe ou cx_Freeze (au choix ) ce serais gentil !

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    En ce qui me concerne, j'utilise cx_freeze, et j'en suis très satisfait, y compris pour des programmes complexes: plusieurs exe, du graphique (PyQt4), de nombreux modules et packages, etc... De plus, cx_freeze existe pour Python 3.x, est régulièrement mis à jour (dernière version: 23/11/2012) et fonctionne en multiplateforme (Windows/Linux/MacOSX).

    On trouve cx_freeze ici: http://cx-freeze.sourceforge.net/. On accède facilement à la doc, et si nécessaire au "mailing-list". Sous Linux, il est assez facile de compiler les sources pour avoir une version plus récente que celle proposée en paquet.

    Dans les différentes méthodes pour utiliser cx_freeze, j'utilise "setup.py". J'ai un modèle de setup que je complète au fur et à mesure de mon expérience. J'ai fait un tuto sur le sujet: http://python.jpvweb.com/mesrecettes..._pyqt4_windows. Je viens de le mettre à jour.

    Cependant, mon expérience du sujet me dit qu'il faut commencer par structurer le programme:

    - identifier le ou les ".exe"

    - identifier tous les modules et packages spécifiques au programme car il faudra dire à à cx_freeze comment les trouver

    - identifier les ressources: les données nécessaires au fonctionnement du programme. Par exemple, l'icone ou les fichiers d'aide. Car il faudra dire à cx_freeze de les recopier

    - séparer nettement le programme et les données sur lesquelles le programme travaille. En effet, les OS actuels n'acceptent pas qu'un programme modifie les données à l'endroit où il est installé, et même si c'est possible, ce n'est pas une bonne pratique sur le plan sécurité. Donc, sauf exception (p. ex. clé USB): le programme va où vont les programmes (par exemple: C:\Programmes\monprogramme), et les données de travail vont dans le home de l'utilisateur, ou dans une zone publique. Si le programme ".exe" est traité par un installeur comme innosetup, il sera installé par Windows avec les autres programmes.

    - quand le programme doit conserver des paramètres d'une session à l'autre, il est pratique (et multiplateforme) de créer un répertoire de type ".monprogramme" dans le home de l'utilisateur. On trouve le home de l'utilisateur avec: os.path.expanduser('~').

    Quand on a fait tout ça, il faut bien reconnaitre qu'il y a la place pour le tâtonnement: on lance le traitement par cx_freeze en console, on examine les centaines de lignes affichées, et on ajuste le setup en conséquence. Il n'est d'ailleurs pas toujours nécessaire de tout corriger pour que ça marche!

    La méthode parait un peu compliquée au départ, mais avec la pratique, on va de plus en plus vite à l'adapter à un nouveau programme, et ça marche vraiment très bien!

    A titre d'exemple, pour un concours photo, j'ai un programme graphique (PyQt4) de saisie de bordereaux en exe qui est placé avec sa base de données SQL sur des clés USB . L'utilisateur à qui j'ai donné une clé fait de la saisie chez lui sur son PC Windows personnel sans rien installer (il n'a ni Python, ni PyQt4): il se contente de lancer l'exe sur la clé. La saisie met à jour la base de données sur la clé. Et à la fin de la saisie, il fait une sauvegarde internet de la base de données sur mon serveur FTP, et je récupère le résultat chez moi, sans me déplacer!
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 32
    Points : 36
    Points
    36
    Par défaut
    Merci de ta réponse.

    Je suis dans le cas (qui me semble être particulier) de Pygame.
    J'ai trouvé le setup.py pour Py2exe donné sur le site de Pygame.

    Mon programme consistant juste en un petit jeu je laisse les dossier de données et de sauvegardes avec le .exe du jeu (on verra plus tard pour le système de sauvegarde chez l'utilisateur ).

    Avec le setur.py que j'ai récupéré j'ai réussi à passer mon programme en .exe.
    Py2exe me rassemble automatiquement les différents .py constituant le programme.

    J'ai eu cependant des erreurs lorsque j'ai lancé la transformation en .exe, notamment ce message: Fatal Python error: (pygame parachute) Segmentation Fault.
    J'ai trouvé la solution (après un bon moment de recherche):
    Il ne faut pas spécifier d’icône dans le setup.py donné par Pygame.

    Donc voilà, problème résolu, merci à vous.

Discussions similaires

  1. génération de l'.exe avec Microsoft VS 2008
    Par bonmau dans le forum Langages
    Réponses: 0
    Dernier message: 09/09/2012, 21h50
  2. Réponses: 20
    Dernier message: 18/01/2011, 12h47
  3. Génération d'un .lib en plus du .exe ?
    Par karto dans le forum C++
    Réponses: 1
    Dernier message: 19/05/2008, 12h47
  4. Réponses: 5
    Dernier message: 16/12/2006, 12h24
  5. Génération d'un .exe indépendant
    Par morgan47 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 05/07/2006, 18h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo