2012-08-26 8 views
19

Sto cercando di costruire un pacchetto da fonte eseguendo python setup.py py2exeerrore: "MSVCP90.dll: No such file or directory" anche se Microsoft Visual C++ 2008 Redistributable Package viene installato

Questa è la sezione di codice da setup.py, suppongo sarebbe rilevante:

if sys.platform == "win32": # For py2exe. 
    import matplotlib 
    sys.path.append("C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\redist\\x86\\Microsoft.VC90.CRT") 
    base_path = "" 
    data_files = [("Microsoft.VC90.CRT", glob.glob(r"C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT\*.*")), 

errore mostra:

*** finding dlls needed *** 
error: MSVCP90.dll: No such file or directory 

Ma ho installato "Microsoft Visual C++ 2008 Redis pacchetto tributario ". Sto eseguendo python a 32 bit su Windows 8 a 64 bit. Sto cercando di creare un binario a 32 bit.

Inoltre non esiste una cartella come questa: "C: \ Programmi \ Microsoft Visual Studio 9.0 \ VC \ redist \". Questo è ciò che il mio computer contiene:

enter image description here

EDIT:

sulla ricerca di msvcp90.dll sul mio C: \ auto ho trovato che sono installati nei percorsi strani come questo:

enter image description here

+0

Questi collegamenti possono aiutare: http://stackoverflow.com/questions/1158705/msvcp90-dll-not-found https://www.microsoft.com/en-us/download/details.aspx?id=29 – squiguy

+1

Questo codice ha esito positivo: 'import ctypes; lib = ctypes.WinDLL ('msvcp90.dll') ' –

+0

@DavidHeffernan: Sì, questo codice ha successo nella shell python (IDLE). Dopo aver eseguito il codice, se eseguo, ">>> lib" Dice claws

risposta

12

Consiglierei di ignorare la dipendenza a titolo definitivo. Aggiungi MSVCP90.dll all'elenco di dll_excludes indicato come opzione per py2exe. Gli utenti dovranno installare Microsoft Visual C++ 2008 ridistribuibile. Un esempio:

setup(
    options = { 
      "py2exe":{ 
      ... 
      "dll_excludes": ["MSVCP90.dll", "HID.DLL", "w9xpopen.exe"], 
      ... 
     } 
    }, 
    console = [{'script': 'program.py'}] 
) 
+0

VS2008 ridistribuibile? È qualche nuovo pacchetto che devo installare? – claws

+0

Mi spiace, intendevo il pacchetto di ridistribuzione Visual C++ 2008. Io modificherò per risolvere. – nneonneo

+1

Se questo è quello che è http://www.microsoft.com/en-us/download/details.aspx?id=29. Quindi l'ho installato e riparato ancora e ancora. Ancora il problema persiste – claws

3

(nuova risposta, dal momento che l'altra risposta descrive una soluzione alternativa)

Si può prendere i file dalla directory WinSxS e copiarli nella directory C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT (normalmente creato da Visual Studio, che non hai). Copiare loro di ottenere la seguente struttura:

+-Microsoft.VC90.CRT 
    | | 
    | +-Microsoft.VC90.CRT.manifest 
    | +-msvcm90.dll 
    | +-msvcp90.dll 
    | +-msvcr90.dll 

Quindi, si dovrebbe essere in grado di eseguire il programma di installazione (ancora escluso msvcp90.dll, come in altra risposta), e dovrebbe trovare con successo i file sotto Microsoft.VC90.CRT e copiarli come file di dati nel tuo gruppo.

Vedere the py2exe tutorial per ulteriori informazioni.

0

Penso che abbia qualcosa a che fare con gli spazi nella directory. Dovresti provare a utilizzare .rstrip(). Ad esempio, inserire:

directory='C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT' 
directory=directory.rstrip() 

È quindi possibile utilizzare la directory delle variabili come se si fosse utilizzato il percorso effettivo.

Questo dovrebbe rendere Python in grado di riconoscere la directory in cui non sarebbe in grado di decifrarlo prima.

0

Avevo un numero enorme di problemi con le complicazioni su Windows, come il problema che si sta affrontando e l'installazione di pacchetti come Cython con pip install cython.

La soluzione che ha funzionato meglio per me dopo due settimane di dolore era il download e l'esecuzione del binario non ufficiale GCC MinGW per Windows fornito here. Potresti provare a dare un colpo e vedere se aiuta.

Se lo si fa, è possibile disinstallare MinGW se ce l'hai già. Non so se sia strettamente necessario, ma l'ho sempre fatto per ogni evenienza. L'ho installato parallelamente a Cygwin senza problemi.