2010-01-20 6 views
5

Sto tentando di impacchettare un'applicazione Python utilizzando py2exe 0.6.9 e Python 2.6.4 su Windows. Mentre l'eseguibile funziona bene il sistema che ho usato per costruirlo, non riesce quando si tenta di eseguirlo su un altro sistema:MemoryLoadError quando si tenta di eseguire l'applicazione py2exe

C:\Documents and Settings\Administrator\Desktop\dist>.\backend.exe install 
Traceback (most recent call last): 
    File "boot_service.py", line 6, in <module> 
    File "zipextimporter.pyo", line 82, in load_module 
    File "win32serviceutil.pyo", line 9, in <module> 
    File "zipextimporter.pyo", line 98, in load_module 
ImportError: MemoryLoadLibrary failed loading win32api.pyd 

Ho una forte sensazione che mi manca una biblioteca, ma io' Non sono sicuro quale sia il —, soprattutto perché il controllore delle dipendenze non segnala nulla come mancante sul sistema di destinazione. Come dovrei procedere?

risposta

1

È possibile eseguire manualmente il controllo dll e dipendenza. Quando generi l'exe sono sicuro che hai notato che stampa le DLL richieste/utilizzate. Controlla sul sistema, dove l'exe non funziona, se la DLL esiste e se sono la stessa versione.

Un'altra cosa. Stai copiando l'intera cartella dist nel sistema o solo l'exe, perché hai bisogno dell'intera cartella dist e non solo dell'exe.

+0

I * am * verifica le DLL e * sono * lì - almeno nel nome.Il controllore delle dipendenze lo sta confermando. Sto copiando l'intera cartella dist, non solo l'exe. –

+0

E le versioni di quelle DLL? li hai controllati? – Paul

1

stai facendo la conversione py2exe su un 64bit/vista?

Sto scrivendo il mio codice su un Vista64bit, e i file .exe che creo di solito non funzionano su XP a 32 bit (quelle sono le due macchine che ho a disposizione).

L'exe tiri utilmente un file di testo con il traceback, e sembra che le finestre a 64 bit utilizza il win32api.dll. Presumo che questo è un .dll utilizzato da finestre a 64 bit per replicare il comportamento del sistema operativo a 32 bit, quindi prendo semplicemente lo stesso script e faccio la conversione su XP a 32 bit. Spero possa aiutare.

0

Solo per chi verrà qui in futuro. Se si utilizza qualsiasi tipo di libreria Win32 e u bloccato con questo tipo di errori si possono fare le seguenti operazioni:

  • Il problema problema è che c'è un conflitto tra le funzioni Win32 i file dll e il py2exe file automaticamente dll . Quindi, per risolvere questo conflitto è necessario conoscere le funzioni richieste file dll, quindi escludere questi file dalle opzioni di configurazione

Esempio:

Secondo il codice seguente:

import win32crypt 
win32crypt.CryptUnprotectData(...) 

ho usato la funzione CryptUnprotectData così ho cercato per la DLL CryptUnprotectData richiesto e ho trovato le seguenti informazioni enter link description here, come u può vedere,
"Crypt32.dll" è richiesto.

così ho modificare il mio setup.py essere quella faccia

includes = ["win32crypt"] 
dll_excludes=["Crypt32.dll"] 


setup(
    options = {'py2exe': {'bundle_files': 1, 'compressed': True,'dll_excludes': dll_excludes,'includes': includes}}) 

e ha funzionato perfettamente.