Bonjour
Tu parles de "pyinstaller", mais il n'est pas mentionné sur ton lien. Je ne peux que de te parler de pyinstaller, que j'utilise aussi (y compris avec PyQt5)..
Pour résoudre le problème que tu poses, voilà comment je fais.
- il vaut mieux utiliser l'option "--onedir" que l'option "--onefile". On se retrouve ainsi avec un répertoire qui contient l'exécutable et tout ce qu'il lui faut pour fonctionner correctement (l'interpréteur et les bibliothèques). Rien ne s'oppose à la présence de fichiers de données supplémentaires, par exemple un sous-répertoire "logos".
- Au traitement par pyinstaller, tu peux utiliser l'option "--add-data" pour transporter un fichier ou un répertoire de la source à la destination. Par exemple, avec:
--add-data ".\icone.png;."
l'icone se retrouvera au même niveau que le futur exécutable (.exe sous Windows)
et avec:
--add-data "E:\Programmes\Python37\Lib\site-packages\PyQt5\Qt\translations;PyQt5\Qt\translations"
Le répertoire des fichiers de traduction de PyQt5 sera aussi automatiquement transporté
Pour la syntaxe: le chemin source et le chemin destination sont séparés par ";".
- un problème qu'il faut souvent traiter: les adresses pour trouver les fichiers de données changent entre la version ".py" et la version ".exe".
Pour trouver la nouvelle adresse, on fait comme ça (c'est dans la doc!):
1 2 3 4 5
| # Répertoire d'exécution avec ou sans pyinstaller (onedir ou onefile)
if getattr(sys, 'frozen', False):
REPEXE = sys._MEIPASS # programme traité par pyinstaller
else:
REPEXE = os.path.dirname(os.path.abspath(__file__)) # prog. normal .py |
On peut ainsi copier les fichiers de données à la main ou avec "--add-data", et le code du programme saura y accéder dans tous les cas grâce au REPEXE calculé au lancement du programme.
Partager