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.
deuxième méthode : avec la commande suivante :
pyinstaller —onefile index.py
j’ai un seul fichier index.exe dans le dossier "dist"
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