Il mio progetto python ha un componente C++ che viene compilato e distribuito come file .pyd all'interno di un uovo Python. Ho notato che sembra essere incompatibile con solo alcuni dei nostri nuovissimi server Windows a 64 bit. Abbiamo 4 (presumibilmente) macchine con provisioning identico - ognuna di esse esegue l'edizione a 64 bit del server Windows 2003, ma 2 di queste macchine non mi consentono di chiamare le funzioni nell'uovo.Perché questo file pyd non viene importato su alcuni computer?
Dopo alcuni esperimenti sono riuscito a trovare una ricetta per producing a reproducible error. Il problema sembra verificarsi quando Python tenta di importare il file pyd.
Ho copiato il pyd in una cartella temporanea e ho eseguito Python.exe da quella posizione, per inciso stiamo ancora utilizzando l'edizione a 32 bit di Python 2.4.4 poiché nessuna delle nostre librerie è stata ancora trasferita su architettura a 64 bit. Quindi cerco di importare il mio modulo (chiamato pyccalyon). La prima volta che provo questa ottengo un messaggio di errore:
"ImportError: DLL load failed: The specified module could not be found"
prossima volta provo questo l'interprete Python si blocca: No stacktrace a tutti!
Ovviamente si sospetta che il mio PYD - la cosa strana è che è già in uso su migliaia di PC e 10 di altri server, molti dei quali sono identici macchine spec a 64 bit. Il progetto è continuamente testato sia in fase di sviluppo che dopo l'uscita, quindi se questa cosa fosse così instabile, ne avremmo saputo molto tempo fa. Questo componente è considerato come codice stabile, quindi è sorprendente che si stia rompendo in modo così spettacolare.
Qualche suggerimento su cosa posso fare per eseguire il debug di questa libreria problematica? Le idee pazze accolgono a questo punto perché abbiamo esaurito tutti i sensati.
Grazie!
Aggiornamento 0: OK utilizzando Process Monitor Sono stato in grado di confrontare un server a 64 bit che ha esito negativo con un altro che funziona bene. Ho trovato che la rottura sembra verificarsi a causa di una DLL mancante, SysWOW64/mscoreee.dll - qualche idea di cosa sia questo componente e dove posso ottenerlo? Posso riferire questo al nostro personale di provisioning IT che può installare roba.
Avete controllato che l'architettura di Python corrisponda all'architettura dei file .pyd? Si noti che l'architettura di Windows è irrilevante. Ciò che importa è che Python a 32 bit == 32-bit .pyd, o Python a 64-bit == 64-bit .pyd. –