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

Python Discussion :

Créer un exécutable (.exe) à partir d'un script python faisant appel à des sources externes (.txt)


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Non-informaticien
    Inscrit en
    Août 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non-informaticien

    Informations forums :
    Inscription : Août 2013
    Messages : 37
    Par défaut Créer un exécutable (.exe) à partir d'un script python faisant appel à des sources externes (.txt)
    Bonjour,

    Le sujet que j’aborde fait probablement très noob, mais, malgré plusieurs essais, je dois bien avouer que j’ai besoin d’une aide : ).

    J’ai créé, avec Python 3.4.1, une application, sous la forme d’un code assez long (plusieurs milliers de lignes, en plusieurs classes et de nombreuses fonctions). Ce code se fait avec importation des modules numpy, tkinter, marshal, random, time, urllib.request, os et operator. Il fonctionne également avec l’importation du contenu de plusieurs fichiers textes.

    Je cherche à transformer en application exécutable même sans installer python (standalone), et j’ai essayé de faire mes propres recherches. J’ai notamment trouvé le module py2exe. J’ai suivi les tutoriels (en anglais, langue que je suis normalement censé comprendre).

    Comme celui-ci :


    Mais j’ai une difficulté à appliquer la même démarche. Je précise que j’ai chargé la dernière version de py2exe, celle de mai 2015 (0.9.2.0).

    J’obtiens des messages d’erreurs tels que :

    Nom : Capture d'écran erreur 30 12 2015.png
Affichages : 16725
Taille : 26,4 Ko

    Le problème vient de l’existence de caractères spéciaux tels que « é », « è »…J’ai essayé de les supprimer dans les noms des variables de mon programme, même dans les chemins des répertoires…Mais apparemment, même les libellés de fenêtres (qui devraient avoir un langage naturel, donc avec des accents si besoin) posent problème.

    Y a-t-il un moyen pour que py2exe ne s’offusque plus de ces caractères spéciaux ? Faut-il tous les supprimer ?

    J’ai une autre question : mon but étant de faire une application standalone, et mon programme ne pouvant fonctionner qu’en important le contenu de fichiers textes dont je précise le chemin (sur un de mes disques, forcément), comment une version finale de l’application traiterait ces fichiers externes ? Je me doute que les chemins n’auraient plus aucune validité sur un autre PC. Les fichiers textes sont-ils enregistrés ou à enregistrer sous un nom/chemin spécial, et le code final (le fichier .py que je veux transformer en .exe) doit-il faire référence à ces fichiers textes d’une manière particulière ?

    N’hésitez pas à me dire si je ne suis pas clair.

    En tout cas, merci de votre attention et bonne année 2016.

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Je fais couramment des exe de codes Python, et ça marche bien, même avec des caractères accentués. Ceci avec de nombreux programmes complexes, y compris de plus de 30.000 lignes avec PyQt. Avec Python 3 qui travaille en unicode, on peut réaliser facilement des programmes en chinois ou en indou si nécessaire.

    Un petit bémol cependant: py2exe n'existe que sous Python 2. Alors, je suppose que tu as pris le py2exe sous Python 3.4 qui se trouve ici: http://www.py2exe.org/. Cette source de programme est bien pratique mais n'est pas garantie. Ça marche souvent très bien et quelquefois mieux que la source officielle, mais quelquefois moins bien.

    Moi j'utilise cx_freeze, et non py2exe, parce que cx_freeze fonctionne aussi sous Linux et sous OS X. Cependant, leur fonctionnement semble similaire.

    Mais il vaut mieux éviter d'utiliser des noms de variables avec des accents, même si c'est accepté par l'interpréteur. Les traitements de type py2exe ou cx_freeze sont très complexes, il vaut mieux les aider que de leur mettre des bâtons dans les roues... En dehors de ça, la présence d'accents dans les titres des widgets graphiques ou dans les données à traiter sont tout à fait normaux.

    La conclusion est qu'il y a un truc qui n'est pas correct dans ton code, mais je ne peux pas dire lequel puisque tu n'en donnes pas.

    Je te suggère la méthode suivante: commence par un tout petit code, genre print("abcéèàùôï"), et fait le traitement par py2exe. Si ça marche, complexifie-le jusqu'à retrouver le problème actuel. Et, avec ce petit code simple, quand ça ne marche pas, affiche-le ici (complètement, avec le shebang ainsi que le setup de traitement!) pour qu'on trouve l'erreur.

  3. #3
    Membre averti
    Homme Profil pro
    Non-informaticien
    Inscrit en
    Août 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non-informaticien

    Informations forums :
    Inscription : Août 2013
    Messages : 37
    Par défaut
    Bonjour tyrtamos,

    et bonne année au passage.

    merci de ta réponse, navré de ne pas t'avoir répondu plus tôt.

    Je vais tester cette démarche et reviendrai vers le forum ensuite.

    Pour l'instant, la ligne qui déclenche l'erreur notée dans la pièce jointe que j'ai mise dans mon message est la dernière de cet extrait :

    class WidgetParametres(object):
    def __init__(self):
    global ListeParametres
    self.root = tk.Tk()
    self.root.title("Changer les valeurs des paramètres")

    Apparemment, et d'après les autres erreurs que j'ai eues à traiter, c'est bien cet accent sur "paramètres" qui engendre l'erreur.

    Cordialement.

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour et meilleurs vœux à toi aussi!

    En principe, avec Python 3, le texte "codé en dur" dans la page de code est en unicode, et je pense que c'est ça qu'il faut à tkinter.

    Mais, car il y a un "mais", l'éditeur de texte utilisé a écrit le texte et l'a enregistré avec un autre encodage (utf-8? cp1252?, latin1?, ...). Il faut donc en informer Python pour qu'il puisse convertir correctement le texte en unicode à partir d'un encodage connu.

    On fait ça avec une simple ligne placée tout en haut de la page de code (exemple pour un code enregistré avec l'encodage "latin1"):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    # -*- coding: latin1 -*-
    Pour Python 3, je crois que l'utf-8 pour la page de code est par défaut.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 740
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 740
    Par défaut
    Salut,

    Citation Envoyé par tyrtamos Voir le message
    En principe, avec Python 3, le texte "codé en dur" dans la page de code est en unicode, et je pense que c'est ça qu'il faut à tkinter.

    Mais, car il y a un "mais", l'éditeur de texte utilisé a écrit le texte et l'a enregistré avec un autre encodage (utf-8? cp1252?, latin1?, ...). Il faut donc en informer Python pour qu'il puisse convertir correctement le texte en unicode à partir d'un encodage connu.
    C'est une théorie cohérente mais le problème devrait être aussi visible au lancement du code à la console.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre averti
    Homme Profil pro
    Non-informaticien
    Inscrit en
    Août 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non-informaticien

    Informations forums :
    Inscription : Août 2013
    Messages : 37
    Par défaut
    Bonsoir,

    j'ai modifié l'encodage, et apparemment tout fonctionne avec # -*- coding: cp1252 -*- .

    J'obtiens le résultat suivant :
    Nom : Résultat création exe 4 01 2015.png
Affichages : 14946
Taille : 50,7 Ko

    Par contre, quand je lance le .exe présent dans le dossier dist qui vient d'être créé, j'obtiens le résultat suivant :
    Nom : Erreur exe 4 1 2016.png
Affichages : 15188
Taille : 160,6 Ko

    Dans le script, la ligne en question est :

    diconatures=marshal.load(open("N:\Invention\Invention 2012\Python\Entrees\listenatures.txt", "rb"))

    C'est un problème que j'ai fréquemment rencontré sur Python, et auquel je me suis adapté au cas par cas, en doublant les "\". Or, ici le programme se trompe car il prétend ne pas trouver un fichier dont le chemin est écrit avec des "\\", alors qu'il est écrit avec des "\" dans le script, tel que je vous l'ai écrit ci-haut.

    Connaissez-vous ce problème ?

    Merci d'avance.

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/04/2012, 23h09
  2. Exécuter un .exe avec des paramètres à partir d'un script python
    Par soufianesse dans le forum Général Python
    Réponses: 3
    Dernier message: 06/10/2011, 14h59
  3. [E-03] Lancer un exécutable (.exe) à partir de VBA
    Par flatalex dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/12/2008, 22h13
  4. Comment exécuter .cshrc à partir d'un script sh lancé par crontab
    Par kenavoparis dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 23/08/2007, 13h53
  5. creer un script.exe à partir d'un script perl
    Par Lady_jade dans le forum Langage
    Réponses: 4
    Dernier message: 22/05/2007, 18h33

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