problème après conversion de fichier python en exécutable par pyinstaller

problème après créatine par pyinstaller de fichier exécutable à partir de fichier python

a marqué ce sujet comme résolu.

salut; je viens de créer une application avec python de version 3.9.4: quand j’exécute le fichier python (index.py), cela marche très bien sans aucun problème. une fois que j’ai convertie ce fichier python avec pyinstaller de version 4.3 avec deux méthodes :

première méthode : avec la commande sous cmd : pyinstaller index.py

j’ai comme résultat le dossier "dist" contenant le fichier exe et d’autres fichiers et sous dossiers comme dans cette image. Image utilisateur

deuxième méthode : avec la commande suivante :

pyinstaller —onefile index.py

j’ai un seul fichier index.exe dans le dossier "dist" Image utilisateur

quand j’exécute le fichier index.exe pour la première méthode tous va bien , et en particulier il ya création des dossiers pour la base de donnée (sous sqlite3)., alors que pour la deuxième méthode le fichier exécutable s’exécute correctement sauf il n’ya création des dossiers de la base de donnée

est ce qu’il ya une solution a ce problème pour la deuxième méthode car j’ai envie que l’exécutable soit un seul fichier plutôt que tout un dossier engendrant plusieurs fichiers concernant les librairies importées.

fonction pour créer les dossiers pour la base de donnée, et la sauvegarde des données dans des fichiers Excel

def copy_of_save_data(self):
        print("chemin d'acces a db cree.")
        path= os.path.dirname(os.path.realpath(__file__))#récupérer le répertoire courant
        # a) creations des  dossiers de sauvegarde de la base de données  pour l'ILs 35R :     
        os.makedirs(path+'\\data_save\\database\\ILS', exist_ok=True)
        print("data_save directory is created at \'\\data_save\\database\\ILS\'")
        # b)creations des sous dossiers de sauvegarde de copie pour l'ILs 35R :
        for loop in ('cev\\liste_corrections_totals','cev\\liste_corrections_confirmees','cev\\liste_corrections_cette_annee','cev\\liste_corrections_periode_choisie','alarmes_axe\\liste_alarmes_axe_totales','alarmes_axe\\liste_alarmes_axe_confirmees','alarmes_axe\\liste_alarmes_axe_ce_mois','alarmes_axe\\liste_alarmes_axe_cette_annee','alarmes_axe\\liste_alarmes_axe_periode_choisie','alarmes_faisceau\\liste_alarmes_faisceau_totales','alarmes_faisceau\\liste_alarmes_faisceau_confirmees','alarmes_faisceau\\liste_alarmes_faisceau_ce_mois','alarmes_faisceau\\liste_alarmes_faisceau_cette_annee','alarmes_faisceau\\liste_alarmes_faisceau_periode_choisie') :
            try:
                os.makedirs(path+'\\data_save\\datafile\\ILS35R\\loc35R\\'+loop)
            except OSError:
                pass
        for loop in ('cev\\liste_corrections_totals','cev\\liste_corrections_confirmees','cev\\liste_corrections_cette_annee','cev\\liste_corrections_periode_choisie','alarmes_axe\\liste_alarmes_axe_totales','alarmes_axe\\liste_alarmes_axe_confirmees','alarmes_axe\\liste_alarmes_axe_ce_mois','alarmes_axe\\liste_alarmes_axe_cette_annee','alarmes_axe\\liste_alarmes_axe_periode_choisie','alarmes_faisceau\\liste_alarmes_faisceau_totales','alarmes_faisceau\\liste_alarmes_faisceau_confirmees','alarmes_faisceau\\liste_alarmes_faisceau_ce_mois','alarmes_faisceau\\liste_alarmes_faisceau_cette_annee','alarmes_faisceau\\liste_alarmes_faisceau_periode_choisie') :
            try:
                os.makedirs(path+'\\data_save\\datafile\\ILS35R\\gp35R\\'+loop)
            except OSError:
                pass
        # c) creations des sous dossiers de sauvegarde de copie pour l'ILs 35L :
        for loop in ('cev\\liste_corrections_totals','cev\\liste_corrections_confirmees','cev\\liste_corrections_cette_annee','cev\\liste_corrections_periode_choisie','alarmes_axe\\liste_alarmes_axe_totales','alarmes_axe\\liste_alarmes_axe_confirmees','alarmes_axe\\liste_alarmes_axe_ce_mois','alarmes_axe\\liste_alarmes_axe_cette_annee','alarmes_axe\\liste_alarmes_axe_periode_choisie','alarmes_faisceau\\liste_alarmes_faisceau_totales','alarmes_faisceau\\liste_alarmes_faisceau_confirmees','alarmes_faisceau\\liste_alarmes_faisceau_ce_mois','alarmes_faisceau\\liste_alarmes_faisceau_cette_annee','alarmes_faisceau\\liste_alarmes_faisceau_periode_choisie') :
            try:
                os.makedirs(path+'\\data_save\\datafile\\ILS35L\\loc35L\\'+loop)
            except OSError:
                pass
        for loop in ('cev\\liste_corrections_totals','cev\\liste_corrections_confirmees','cev\\liste_corrections_cette_annee','cev\\liste_corrections_periode_choisie','alarmes_axe\\liste_alarmes_axe_totales','alarmes_axe\\liste_alarmes_axe_confirmees','alarmes_axe\\liste_alarmes_axe_ce_mois','alarmes_axe\\liste_alarmes_axe_cette_annee','alarmes_axe\\liste_alarmes_axe_periode_choisie','alarmes_faisceau\\liste_alarmes_faisceau_totales','alarmes_faisceau\\liste_alarmes_faisceau_confirmees','alarmes_faisceau\\liste_alarmes_faisceau_ce_mois','alarmes_faisceau\\liste_alarmes_faisceau_cette_annee','alarmes_faisceau\\liste_alarmes_faisceau_periode_choisie') :
            try:
                os.makedirs(path+'\\data_save\\datafile\\ILS35L\\gp35L\\'+loop)
            except OSError:
               pass

code d’insertion de la fonction dans le constructeur :

class MainApp(QMainWindow,Ui_MainWindow) :
    def __init__(self,parent=None) :
 
        super(MainApp,self).__init__(parent)
        QMainWindow.__init__(self)
        self.setupUi(self)
        self.win_UI()          
        self.copy_of_save_data() 

merci pour l’aide

Si je ne fais erreur, la deuxième méthode créer un auto-extracteur. ça signifie que lorsque tu exécute ton index.exe, la liste des fichiers sont extrait (selon la première méthode) dans un dossier temporaire. (sous linux, c’est un dossier du type /tmp/_MEI34121).

Je te redirige vers cette page de documentation qui devrait t’aider à résoudre ton problème: https://pyinstaller.readthedocs.io/en/stable/runtime-information.html

merci pour toutes info, mais j’ai oublié de mentionner que j’ai déjà introduit le code ci-dessous tout au début du code de mon application avant l’importation des librairies de PyQt5 pour remédier au problème de dossier courant durant la création des dossiers de la BDD:


###############################################################
# Fix qt import error : Include this file before import PyQt5 

def _append_run_path():
    if getattr(sys, 'frozen', False):
        pathlist = []
    
# If the application is run as a bundle, the pyInstaller bootloader
# extends the sys module by a flag frozen=True and sets the app
# path into variable _MEIPASS'.
        pathlist.append(sys._MEIPASS)

        # the application exe path
        _main_app_path = os.path.dirname(sys.executable)
        pathlist.append(_main_app_path)

# append to system path enviroment
        os.environ["PATH"] += os.pathsep + os.pathsep.join(pathlist)

    logging.error("current PATH: %s", os.environ['PATH'])

# appel de la fonction avant  PyQT5 : 
_append_run_path()

#  PyQT5 : 
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
.
.
.


+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte