web-dev-qa-db-fra.com

Pyinstaller onefile ne démarre pas sur certaines machines Windows 7

J'ai créé un fichier exe qui fonctionne bien sur certaines machines Windows et échoue sur d'autres.

Je ne pouvais pas encore trouver la cause de l'échec.

Données importantes:

  • x64 exe 
  • Windows 7
  • Python 3.5.1 
  • pyinstaller 3.0
  • un fichier

Le DEBUG montre ce qui suit:

C:\temp\r>mytool_debug.exe
PyInstaller Bootloader 3.x
LOADER: executable is C:\temp\r\mytool_debug.exe
LOADER: homepath is C:\temp\r
LOADER: _MEIPASS2 is NULL
LOADER: archivename is C:\temp\r\mytool_debug.exe
LOADER: Extracting binaries
LOADER: Executing self as child
LOADER: set _MEIPASS2 to C:\temp\_MEI55762
LOADER: Setting up to run child
LOADER: Creating child process
LOADER: Waiting for child process to finish...
PyInstaller Bootloader 3.x
LOADER: executable is C:\temp\r\mytool_debug.exe
LOADER: homepath is C:\temp\r
LOADER: _MEIPASS2 is C:\temp\_MEI55762
LOADER: archivename is C:\temp\r\mytool_debug.exe
LOADER: SetDllDirectory(C:\temp\_MEI55762)
LOADER: Already in the child - running user's code.
LOADER: manifestpath: C:\temp\_MEI55762\mytool.exe.manifest
LOADER: Activation context created
LOADER: Activation context activated
LOADER: Python library: C:\temp\_MEI55762\python35.dll
Error loading Python DLL: C:\temp\_MEI55762\python35.dll (error code 127)
LOADER: Back to parent (RC: -1)
LOADER: Doing cleanup
LOADER: Freeing archive status for C:\temp\r\mytool_debug.exe

Il y a aussi un message d'erreur affiché dans une fenêtre:

Entry Point Not Found

The procedure entry point ucrtbase.terminate could not be located in the dynamic link library api-ms-win-crt-runtime-l1-1-0.dll 

Lorsque je copie tous les fichiers de C:\temp_MEI55762 (où le chargeur de démarrage a extrait tous les fichiers) dans le répertoire C:\temp\r (où se trouve mytool_debug.exe) et exécute mytool_debug.exe, cela fonctionne.

Comme dit mytool.exe fonctionne bien sur les autres ordinateurs Windows 7/8. J'ai trouvé 2 ordinateurs où cela ne fonctionne pas à cause de l'erreur ci-dessus.

Où devrais-je commencer à chercher?

8
kotlet schabowy

Après avoir installé environ 200 mises à jour Windows, l'erreur a disparu. 

La mise à jour requise est adressée par KB2999226

8
kotlet schabowy

Il y a une discussion à ce sujet ici qui travaille vers une solution de construction plutôt que d'avoir à installer Windows Update: https://github.com/pyinstaller/pyinstaller/issues/1566 . À compter d'aujourd'hui (9 mai 2017), il n'y a toujours pas de solution définitive. Il existe 2 solutions qui ont fonctionné pour certaines personnes:

  • Installez le Windows 10 SDK et ajoutez les répertoires ucrt DDL à votre chemin système (C:\Program Files\Windows Kits\10\Redist\ucrt ou C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\x64 en fonction de votre système) avant la construction

  • Utilisez Python 3.4 pour compiler au lieu de 3.5+

1
Daniel Holmes