J'essaie de construire un EXE d'un seul fichier avec PyInstaller qui doit inclure une image et une icône. Je ne parviens pas à le faire fonctionner avec --onefile
.
Si je le fais --onedir
tout fonctionne très bien. Lorsque j'utilise --onefile
En revanche, il ne trouve pas les fichiers supplémentaires référencés (lorsqu'il exécute l'EXE compilé). Il trouve les DLL et tout le reste sans problème, mais pas les deux images.
J'ai regardé dans le répertoire temporaire généré lors de l'exécution de l'EXE ( \Temp\_MEI95642\
par exemple) et les fichiers s'y trouvent effectivement. Lorsque je dépose l'EXE dans ce répertoire temporaire, il les trouve. Cela me laisse très perplexe.
C'est ce que j'ai ajouté à la .spec
fichier
a.datas += [('images/icon.ico', 'D:\\[workspace]\\App\\src\\images\\icon.ico', 'DATA'),
('images/loaderani.gif','D:\\[workspace]\\App\\src\\images\\loaderani.gif','DATA')]
Je dois ajouter que j'ai essayé de ne pas les mettre dans des sous-dossiers également, cela n'a pas fait de différence.
Editar: Marqué une réponse plus récente comme correcte en raison de la mise à jour de PyInstaller.
11 votes
Merci beaucoup ! la ligne ici (
a.datas += ...
) m'a vraiment aidé à l'instant. La documentation de pyinstaller parle de l'utilisation deCOLLECT
mais cela ne permet pas de mettre les fichiers dans le binaire lorsque l'on utilise--onefile
0 votes
@IgorSerebryany : Je suis d'accord ! Je viens d'avoir exactement le même problème.
0 votes
Mon .exe se plante lorsque je clique sur la barre de menu si j'ai utilisé
1 votes
Tenez compte du fait que le dossier temporaire disparaît à la fin de l'exécution, donc pour vérifier ce qu'il contient, mettez un listdir de sys._MEIPASS dans votre programme. principal
0 votes
Existe-t-il également un moyen d'utiliser la syntaxe Tree() que je semble avoir vue un peu partout ?