2009-07-17 11 views
6

Confesserò che sono molto nuova a Python e non so davvero cosa sto facendo ancora. Recentemente ho creato un'applicazione per Windows molto piccola usando Python 2.6.2 e wxPython 2.8. E funziona alla grande; Sono abbastanza contento di come funziona normalmente. Con normalmente io intendo quando invoco direttamente tramite l'interprete Python, in questo modo:py2exe: l'applicazione Windows Python compilata non verrà eseguita a causa della DLL

> python myapp.py 

Tuttavia, ho voluto fare un passo ulteriore ed effettivamente compilare questo in un file eseguibile standalone. Così ho seguito these instructions dal wiki wxPython che utilizza py2exe. All'inizio mi ha dato errori nella riga di comando, dicendo che mancava MSVCR90.dll. Quindi ho copiato MSVCR90.dll nella mia cartella Python \ DLLs. A prima vista sembrava come se l'avesse risolto, dal momento che aveva fatto con successo ciò che doveva fare. Finì con un rapido avvertimento che c'erano alcuni file DLL da cui dipendeva il programma e potrei o non potrei aver bisogno di distribuirli.

Così ho navigato nella cartella dist creata da py2exe e ho provato a eseguire il mio eseguibile. Ma cercando di aprirlo spuntato solo fino una finestra di errore che diceva:

This application failed to start because MSVCR90.dll was not found. 
Re-installing the application may fix this problem. 

Così sono andato avanti e copiati di nuovo Msvcr90.dll in questa cartella dist. Ma questo non ha funzionato. Quindi l'ho copiato nella directory \ system32 di WINDOWS. Neanche questo lo ha fatto. Cosa devo fare per far funzionare questa cosa?

+1

Questo è un duplicato di un'altra domanda con una discussione più completa:
StackOverflow un giorno potrebbe fidarsi di me abbastanza da poterlo contrassegnare come duplicato. – resplin

risposta

8

Non è possibile copiare solo msvcr *. Dll: è necessario impostarli utilizzando le regole per gli assembly affiancati. Puoi farlo installando il pacchetto ridistribuibile, come indicato da Sam, oppure puoi metterli insieme ai tuoi eseguibili purché rispettino le regole.

vedere la sezione "Distribuzione di Visual C++ DLL biblioteca come assembly privati" qui: How to Deploy using XCopy per i dettagli, ma fondamentalmente l'applicazione si presenta così:

c:\My App\MyApp.exe 
c:\My App\Microsoft.VC90.CRT\Microsoft.VC90.CRT.manifest 
c:\My App\Microsoft.VC90.CRT\msvcr90.dll 

Uno dei vantaggi di questo è che gli utenti non amministratori possono utilizzare la tua app (credo che tu debba essere un amministratore per installare il runtime tramite il programma di installazione ridistribuibile). E non c'è bisogno di alcun programma di installazione - basta copiare i file su un PC e tutto funziona.

+0

È una funzionalità di Vista? Ho riscontrato un problema simile (MSVCP71.DLL segnalato mancante durante l'avvio di un'applicazione py2exe) e lo ho inserito nella stessa directory di .exe risolto (almeno su XP) –

+1

@Luper: credo che le nuove regole siano arrivate con msvcr80 . – RichieHindle

Problemi correlati