2014-10-18 14 views
5

Ho un'applicazione python che sto cercando di creare come distribuibile pyinstaller. Uno script simile si sviluppa con successo su Linux.Come indicare pyinstaller alle versioni corrette di MSVC? 90.dll?

Lo sto costruendo su Windows 7 x64, ma voglio creare binari a 32 bit per una migliore compatibilità, quindi sto usando python-2.7 a 32 bit. Tra le mie dipendenze sono matplotlib e pyside che richiedono MSVC. Installa un pacchetto chiamato VCForPython27 da Microsoft.

Si verifica un errore durante l'esecuzione del mio script pyinstaller. Ottengo il seguente messaggio:

1250 INFO: Adding Microsoft.VC90.CRT to dependent assemblies of final executable 
7428 INFO: Searching for assembly x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none ... 
7428 WARNING: Assembly not found 
7428 ERROR: Assembly x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none not found 
7475 WARNING: lib not found: MSVCR90.dll dependency of C:\Python27\python.exe 
7553 INFO: Searching for assembly x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none ... 
7553 WARNING: Assembly not found 
7553 ERROR: Assembly x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none not found 
7662 WARNING: lib not found: MSVCR90.dll dependency of C:\Windows\system32\python27.dll 
7662 INFO: Analyzing C:\Python27\lib\site-packages\PyInstaller\loader\_pyi_boots 

Non ci sono più messaggi del genere su entrambi i file MSVCP90.dll e Msvcr90.dll

posso vedere che ho una cartella che contiene le versioni C:\Windows\winsxs\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2 di entrambi i file.

Questa discrepanza si verifica sia quando installo i miei pacchetti python da Christoph Gohlke's page e con pip (eccetto per matplotlib, che non posso installare con pip a causa di dipendenze mancanti).

Stranamente pyinstaller fa un binario. Eppure, quando provo a fare funzionare io ottenere un detto popup:

WARNING: file already exists but should not: 
C:\Users\Martin\AppData\Local\Temp\_MEI34922\Include\pyconfig.h 

Qualcuno sa come posso fare una delle seguenti:

  1. Installare il prezioso x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none montaggio? Da dove posso prendere questa versione specifica?
  2. Dite a Python di cercare l'altra versione (x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2)?
  3. Risolvere il problema di presenza indesiderata di pyconfig.h? Non sembra portare da nessuna parte, ma ho pensato che dovrei provarlo anche io.
  4. Trova un altro modo per creare il mio codice su un binario? È un codice complicato, che esegue binari esterni, ma se dovessi provare a Py2exe, non sono sicuro che sarebbe meglio.
+1

Una soluzione per il problema 'pyconfig.h' viene inoltrata [qui] (http://stackoverflow.com/questions/19055089/pyinstaller-onefile- warning-pyconfig-h-quando-importazione-SciPy segnale SciPy-o-). – mapto

risposta

7

Il pacchetto ridistribuibile che contiene la versione 9.0.21022.8 di msvcr90.dll e msvcp90.dll possono essere scaricati dal sito Web Microsoft here. Ciò aiuterà PyInstaller a trovare le versioni che desidera e includerle nell'eseguibile risultante.

È interessante notare che sono in grado di eseguire l'eseguibile compilato da PyInstaller con la versione ridistribuibile 9.0.30729.6161 installata, ma semplicemente non comprime queste DLL. Ho provato a copiare il file msvc*90.dll nella directory dist, persino a provare a creare e modificare file manifest, ma alla fine ricevo comunque un errore da python27.dll. L'installazione di qualsiasi versione di VC++ ridistribuibile risolverebbe il problema, ma il mio pacchetto non sarebbe autosufficiente. Vorrei aver capito cosa sta succedendo esattamente qui ...

Problemi correlati