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 :

Exécutable long à se lancer


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    437
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 437
    Points : 109
    Points
    109
    Par défaut Exécutable long à se lancer
    Bonjour,

    J'ai compilé mon application avec PyInstaller et mon exe est très long à se lancer... Il faut compter environ 20s avant que ma GUI s'affiche...

    Mon script compilé fait 50Mo (je pense que je n'ai sûrement pas optimisé les import).

    Mes appels d'import:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    from configparser import ConfigParser
    import tkinter as tk
    from tkinter import *
    from tkinter import ttk
    from tkinter.ttk import *
    from tkinter import font
    from tkinter import Listbox
    import ftplib
    import os
    from datetime import datetime, timedelta
    #from pytz import timezone
    #import string
    #import array
    from io import BytesIO
    import numpy as np
    from mpl_toolkits.axes_grid1 import host_subplot
    import matplotlib.pyplot as plt
    #from collections import Counter
    from tkinter import messagebox
    from tkinter.scrolledtext import ScrolledText
    from numpy import array
    from tkinter import filedialog

    J'ai essayé en local ou sur réseau, même lenteur... Script compilé en un exe unique ou dossier même punition...

    Auriez-vous de idées sur l'origine de cette lenteur?

    Merci par avance pour vos retours.

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    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 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Il est clair que tu importes beaucoup de modules "lourds" (numpy, matplotlib, ...), mais aussi que ton importation de tkinter est épouvantable! Regarde la doc, et débrouilles-toi pour faire ça en une seule ligne!!! Idem pour numpy.

    Sinon, avec pyinstaller, il vaut mieux utiliser le mode "onedir". En effet, le mode "onefile" si pratique pour diffuser le programme, commence en fait au lancement à se désarchiver dans un répertoire temporaire avant de démarrer l'exécution elle-même, ce qui fait perdre un peu de temps.

    Enfin, pyinstaller ne fait pas de "compilation en langage natif", mais un assemblage du code compilé en bytecodes, avec l'interpréteur Python et toutes les bibliothèques nécessaires. Vis à vis de la rapidité d'exécution, il s'agit donc d'un programme Python interprété habituel, et tkinter est interprété aussi (tcl/tk).
    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
    Membre régulier
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    437
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 437
    Points : 109
    Points
    109
    Par défaut
    Bonjour,

    Merci pour votre retour. Quel 'compilateur' dois-je prendre pour optimiser le temps d'ouverture? J'ai commencé à regarder pour simplifier l'import des différentes bibliothèques mais je suis toujours confronté à une erreur... je n'arrive pas à l'optimiser

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Supernatural Voir le message
    J'ai commencé à regarder pour simplifier l'import des différentes bibliothèques mais je suis toujours confronté à une erreur... je n'arrive pas à l'optimiser
    Il n'y a pas d'erreur, c'est juste lent.
    D'abord il faut commencer par créer une application minimaliste qui permette d'avoir une idée de ce que peut être un temps de chargement "normal" i.e. difficile de faire plus petit.
    Après il faut trouver ce qui ralenti les chargements en commençant par ajouter les imports.
    Si c'est bien là que çà se passe, c'est peut être l'import d'une ou de plusieurs bibliothèques particulières.
    Tant que vous n'aurez pas mis le doigt plus précisément sur le problème, difficile de trouver une solution qui pourra s'appliquer. Çà peut aller de la mise à jour de bibliothèques à la réorganisation de votre code, et/où la création d'un splashscreen pour dire à l'utilisateur de patienter.
    La seule chose que vous pouvez faire vite fait "pour voir" serait de construire votre package avec autre chose que PyInstaller (cx_Freeze par exemple).

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

  5. #5
    Membre régulier
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    437
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 437
    Points : 109
    Points
    109
    Par défaut
    Quand j'execute le script à partir de la console, c'est instantané... Par contre j'aurai vraiment besoin d'aide car je n'y comprend absolument rien, je ne vois pas comment ont constituées les librairies...

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Bordeaux
    Inscrit en
    Juillet 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Bordeaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2012
    Messages : 24
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par Supernatural Voir le message
    Bonjour,

    Merci pour votre retour. Quel 'compilateur' dois-je prendre pour optimiser le temps d'ouverture? J'ai commencé à regarder pour simplifier l'import des différentes bibliothèques mais je suis toujours confronté à une erreur... je n'arrive pas à l'optimiser
    Bonsoir,
    Pour vérifier avec pyinstaller j'ai fait un fichier unique (option --onefile) de votre code auquel j'ai ajouté une fenêtre tkinter basique.
    La fenêtre apparaît au bout de 3 secondes.
    Ubuntu 18.04 Core I5, 6go de ram, DD mécanique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    from configparser import ConfigParser
    import tkinter as tk
    from tkinter import *
    from tkinter import ttk
    from tkinter.ttk import *
    from tkinter import font
    from tkinter import Listbox
    import ftplib
    import os
    from datetime import datetime, timedelta
    #from pytz import timezone
    #import string
    #import array
    from io import BytesIO
    import numpy as np
    from mpl_toolkits.axes_grid1 import host_subplot
    import matplotlib.pyplot as plt
    #from collections import Counter
    from tkinter import messagebox
    from tkinter.scrolledtext import ScrolledText
    from numpy import array
    from tkinter import filedialog
     
    fen=Tk()
    mainloop()

  7. #7
    Membre régulier
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    437
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 437
    Points : 109
    Points
    109
    Par défaut
    Je n'ai jamais utiliser PyInstaller (je ne peux pas l(installer à mon travail, problème de pare-feu), quel commande doit-on utiliser pour que je puisse le faire de chez moi svp?

    Merci par avance.

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