le répertoire courant. En cas de collision de noms, il suffit de spécifier d'autres noms
ou chemins dans les options respectives --workpath et --distpath de PyInstaller.
Distribution en un fichier exécutable
Pour distribuer l'application BiblioApp en un seul fichier exécutable, du nom
biblioapp par exemple, saisissez la commande :
pyinstaller -F -n biblioapp start_biblio_app.py
Après quelques messages un peu ésotériques, un fichier exécutable biblioapp (ou
biblioapp.exe pour Windows) devrait être disponible dans le sous-répertoire dist/
créé par PyInstaller. Notons que cet exécutable a une taille conséquente (23 Mo dans
notre test sous Windows), de loin supérieure à la taille de l'application. C'est assez
logique : il inclut toutes les bibliothèques requises pour faire tourner Python et PyQt. Si
cette taille est jugée prohibitive, vous pouvez faire appel à UPX, un utilitaire de
compression d'exécutables ; référez-vous à la documentation de PyInstaller qui
explique comment mettre cet utilitaire en œuvre.
Nous pouvons à présent lancer cet exécutable et constater que la fenêtre principale
apparaît et que tout fonctionne comme dans l'environnement de développement. Notons
toutefois qu'une console est lancée en sus de la fenêtre principale ; elle peut être très
utile si l'application écrit des messages sur la sortie standard, via l'instruction print
par exemple. Il faut avertir l'utilisateur de ne pas fermer cette console (qui est en fait le
processus parent de l'application PyQt), auquel cas la fenêtre principale serait ellemême fermée brutalement. Si on ne veut pas faire apparaître cette console, il faut
l'indiquer à PyInstaller en passant l'option -w ou --noconsole sur la ligne de
commande : l'exécutable alors généré n'affichera que la fenêtre principale au
démarrage.
Attention > L'option d'exécutable sans console est fortement déconseillée dans le
cas d'une application qui écrit sur la sortie standard. Les messages, qui n'ont aucun
moyen de s'afficher, sont mis dans une zone tampon qui n'est jamais purgée. Au
mieux, on gaspille de la mémoire ; au pire, l'application peut planter lorsque cette
zone tampon est remplie.
L'exécutable qui vient d'être créé est prêt à être distribué pour la plateforme hôte.
Comme signalé plus haut, si on veut des exécutables pour d'autres plateformes, il faut
avoir des machines (éventuellement virtuelles) avec les systèmes d'exploitation cibles ;
on doit alors y avoir installé Python, PyQt et PyInstaller et, bien sûr, avoir accès au
46
ou chemins dans les options respectives --workpath et --distpath de PyInstaller.
Distribution en un fichier exécutable
Pour distribuer l'application BiblioApp en un seul fichier exécutable, du nom
biblioapp par exemple, saisissez la commande :
pyinstaller -F -n biblioapp start_biblio_app.py
Après quelques messages un peu ésotériques, un fichier exécutable biblioapp (ou
biblioapp.exe pour Windows) devrait être disponible dans le sous-répertoire dist/
créé par PyInstaller. Notons que cet exécutable a une taille conséquente (23 Mo dans
notre test sous Windows), de loin supérieure à la taille de l'application. C'est assez
logique : il inclut toutes les bibliothèques requises pour faire tourner Python et PyQt. Si
cette taille est jugée prohibitive, vous pouvez faire appel à UPX, un utilitaire de
compression d'exécutables ; référez-vous à la documentation de PyInstaller qui
explique comment mettre cet utilitaire en œuvre.
Nous pouvons à présent lancer cet exécutable et constater que la fenêtre principale
apparaît et que tout fonctionne comme dans l'environnement de développement. Notons
toutefois qu'une console est lancée en sus de la fenêtre principale ; elle peut être très
utile si l'application écrit des messages sur la sortie standard, via l'instruction print
par exemple. Il faut avertir l'utilisateur de ne pas fermer cette console (qui est en fait le
processus parent de l'application PyQt), auquel cas la fenêtre principale serait ellemême fermée brutalement. Si on ne veut pas faire apparaître cette console, il faut
l'indiquer à PyInstaller en passant l'option -w ou --noconsole sur la ligne de
commande : l'exécutable alors généré n'affichera que la fenêtre principale au
démarrage.
Attention > L'option d'exécutable sans console est fortement déconseillée dans le
cas d'une application qui écrit sur la sortie standard. Les messages, qui n'ont aucun
moyen de s'afficher, sont mis dans une zone tampon qui n'est jamais purgée. Au
mieux, on gaspille de la mémoire ; au pire, l'application peut planter lorsque cette
zone tampon est remplie.
L'exécutable qui vient d'être créé est prêt à être distribué pour la plateforme hôte.
Comme signalé plus haut, si on veut des exécutables pour d'autres plateformes, il faut
avoir des machines (éventuellement virtuelles) avec les systèmes d'exploitation cibles ;
on doit alors y avoir installé Python, PyQt et PyInstaller et, bien sûr, avoir accès au
46
