web-dev-qa-db-fra.com

Utilisation de --onefile avec un .spec dans PyInstaller

Je "compile" un programme en utilisant PyInstaller en utilisant un fichier .spec. J'utilise le fichier .spec car je dois inclure un fichier supplémentaire dans le programme. Quand j'essaye de faire PyInstaller --onefile Prog.spec, il crée toujours un dossier dans dist avec tous les fichiers séparés au lieu de créer un seul fichier comme je m'y attendais. Si je fais PyInstaller --onefile Prog.py alors il crée un seul fichier .exe dans dist, ce que je veux. Y a-t-il quelque chose de spécial que je dois faire lors de l'utilisation d'un fichier .spec?

8
TheStrangeQuark

Vous pouvez ajouter le fichier supplémentaire sur la ligne de commande au lieu de modifier le fichier de spécifications:

pyinstaller --onefile --add-data <SRC;DEST or SRC:DEST> yourfile.py

Sinon, assurez-vous qu'il n'y a pas d'étape de collecte dans le fichier de spécifications:

"En mode un fichier, il n'y a aucun appel à COLLECT et l'instance EXE reçoit tous les scripts, modules et binaires."

https://pyinstaller.readthedocs.io/en/stable/usage.html pour plus d'informations sur les drapeaux de ligne de commande.

Cela peut également offrir un aperçu si les problèmes persistent: Regroupement de fichiers de données avec PyInstaller (--onefile)

6
The4thIceman

Utilisation pyi-makespec --onefile yourprogram.py pour générer un exemple de fichier de spécifications pour le mode un fichier.

https://pythonhosted.org/PyInstaller/man/pyi-makespec.html


Il n'y a pas d'appel COLLECT et l'appel EXE est différent. Exemple:

exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='main',
          debug=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=True )
14
Alan L