2013-10-07 4 views
18

Quindi sono in esecuzione su Windows 7 a 64 bit e ho configurato Pyinstaller con Pip e PyWin32. Ho python 2.7.PyInstaller non funziona su un semplice programma HelloWorld

Ho fatto un semplice programma ciao mondo con questo codice

print "hello world!" 

ho messo il file nella stessa directory di PyInstaller, e corse questo codice nel prompt dei comandi

pyinstaller.py helloWorld.py 

Eppure, quando Ci provo, ottengo questo messaggio di errore:

Error loading Python DLL: C:\PROGRA~1\PYINST~1.1\build\HELLOW~1\python27.dll (error code 126) 

Cosa sto facendo di sbagliato e come posso risolvere questo problema?

risposta

30

Run con la bandiera -F per produrre l'exe standalone: ​​

pyinstaller.py -F helloworld.py 

Sarà in uscita a dist/Helloworld.exe

notare che questo è un luogo diverso da quando -F non viene utilizzato, assicurati di eseguire il giusto exe in seguito.

+8

Vale la pena notare che ora appare come output in 'dist/{nomefile}', piuttosto che 'build/{nomefile}'. –

+0

Grazie, ho aggiornato la mia risposta per riflettere la nuova posizione – tul

1

Grazie @tul! La mia versione di pyinstaller lo mise a dist \ helloworld.exe però!

Se si inizia da C: \ Python27 \ Scripts ... che sarò C: \ Python27 \ Scripts \ dist ... pure!

Ma dovunque lo avete, vi consiglio di mettere un file batch di accanto al tuo Py per poter ricompilare qualsiasi momento con un semplice click:

ho impostato in modo non v'è nulla, ma il file exe nella posizione .py e la roba temporanea va al dir temp:

@echo off 
:: get name from filename without path and ext 
set name=%~n0 
echo ========= %name% ========= 

:: cut away the suffix "_build" 
set name=%name:~0,-6% 
set pypath=C:\Python27\Scripts 
set buildpath=%temp% 

if not exist %name%.py (
    echo ERROR: "%name%.py" does not exist here! 
    pause 
    exit /b 
) 

%pypath%\pyinstaller.exe --onefile -y %~dp0%name%.py --distpath=%~dp0 --workpath=%buildpath% --specpath=%buildpath% 

mi name it come il file .py plus "_build" e tagliare via il suffisso nel script batch di nuovo. Voilà.