2010-01-20 10 views
5

Ich versuche, eine Python-Anwendung mit py2exe 0.6.9 und Python 2.6.4 unter Windows zu bündeln. Während die ausführbare Datei nur gut auf dem System läuft ich es bauen verwendet, versagt es, wenn ich es auf einem anderen System zu laufen versuchen:MemoryLoadError beim Versuch, py2exe Anwendung auszuführen

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 

Ich habe ein starkes Gefühl, dass ich eine Bibliothek fehlt bin, aber ich Ich bin mir unsicher, welche — insbesondere, da der Abhängigkeitsüberprüfer nichts auf dem Zielsystem als fehlend markiert. Wie soll ich vorgehen?

Antwort

1

Sie können die Dll- und Abhängigkeitsprüfung manuell durchführen. Wenn Sie die EXE generieren, bin ich mir sicher, dass Sie bemerkt haben, dass sie die benötigten DLLs ausdruckt. Überprüfen Sie auf dem System, wo die Exe nicht funktioniert, ob die DLLs existieren und ob sie dieselbe Version haben.

Eine andere Sache. Kopieren Sie den gesamten Ordner "dist" auf das System oder nur auf die exe, da Sie den gesamten dist-Ordner und nicht nur die exe benötigen.

+0

Ich * bin * auf die DLLs prüfen, und sie * sind * dort - zumindest im Namen.Der Abhängigkeits-Checker bestätigt dies. Ich kopiere den ganzen Ordner dist, nicht nur die exe. –

+0

Und die Versionen dieser DLL? Hast du sie überprüft? – Paul

1

Machst du die py2exe Konvertierung auf einem 64bit/Vista?

Ich habe meinen Code auf einem Vista64bit geschrieben, und die .exe-Dateien, die ich erstelle, funktionieren normalerweise nicht auf 32bit XP (das sind die zwei Maschinen, die ich zur Hand habe).

Die .exe wirft hilfreicherweise eine Textdatei mit dem Traceback aus, und es scheint, dass das 64-Bit-Fenster die win32api.dll verwendet. Ich nehme an, dass dies eine DLL ist, die von 64-Bit-Fenstern verwendet wird, um das 32-Bit-Betriebssystemverhalten zu replizieren, also nehme ich einfach das gleiche Skript und führe die Konvertierung auf dem 32-Bit-XP durch. Ich hoffe, das hilft.

0

Nur für jeden, der in Zukunft hierher kommen wird. Wenn Sie jede Art von win32-Bibliothek verwenden und u mit dieser Art von Fehler stecken können Sie die folgenden Schritte ausführen:

  • Das Problem Problem ist, dass es einen Konflikt zwischen win32 Funktionen DLL-Dateien und die py2exe automatisch DLL-Dateien . Also, diesen Konflikt zu lösen, die Sie haben Ihre Funktionen erforderlich DLL-Dateien kennen, dann schließen Sie diese Dateien von den Setup-Optionen

Beispiel:

Nach dem folgenden Code:

import win32crypt 
win32crypt.CryptUnprotectData(...) 

I verwendet die CryptUnprotectData-Funktion, so dass ich nach der CryptUnprotectData erforderlichen DLL gesucht und ich fand die folgenden Informationen enter link description here, Wie Sie sehen können,
"Crypt32.dll" erforderlich ist.

so bearbeite ich meine setup.py wie die

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


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

aussehen zu sein, und es funktionierte perfekt.

Verwandte Themen