2009-09-17 8 views
7

Ich kann nicht py2exe packen richtig, auch ein einfaches Skript, die win32file nutzt ich ständig die folgende Fehlermeldung erhalten:Problem mit dem Laden win32file.pyd auf Python 2.6

Traceback (most recent call last): 
    File "dependency_checker.py", line 1, in <module> 
    File "win32file.pyc", line 12, in <module> 
    File "win32file.pyc", line 10, in __load 
ImportError: DLL load failed: The specified procedure could not be found. 

Das Skript sieht aus, als folgt:

import win32file 
print "Hello world!" 

Und hier ist die setup.py:

from distutils.core import setup 
import py2exe 
setup(console=['dependency_checker.py']) 

Hav Hast du vorher schon ähnliches Problem?

Versionen:

Python 2.6.2, 0.6.9 py2exe, pywin32-214, Windows 7 und Windows XP Pro als Zielmaschine

UPDATE:

  • ich laufen kann das gebündelte Programm auf meinem Windows 7, wo es erstellt wurde, aber ich kann es nicht auf dem XP-Rechner ausführen.
  • Der Teil win32file.pyc, dass der Fehler wie folgt aussieht wirft: oben auf meiner Dev-Box

    >>> imp.load_dynamic('win32file', r'C:\test\setup-test\src\dist\win32file.pyd') 
    

Die Linie (Windows 7) ordnungsgemäß ausgeführt wird, während auf Testbox (Windows XP) zurückkehrt der Fehler.

** UPDATE 2: **

Wenn ich imp.load_dynamic win32file Form Python-Installation laden, dann kann ich die win32file.pyd für den dist-Ordner ohne Fehler neu zu laden.

Antwort

9

Die Lösung war, MSWSOCK.dll zu entfernen, die falsch von py2exe in das Verzeichnis dist kopiert wurde.

Ich habe procmon und listdll verwendet, um zu überprüfen, was von win32file.pyd geladen wird, wenn der Import erfolgreich ist und welche DLL geladen wird, wenn der Import fehlschlägt. Dann habe ich die Liste der DLLs, die ich überprüft habe, ob sie korrekt geladen sind, dh. Python DLLs aus Dist-Ordner und Windows-DLLs aus Windows-Ordner. Hier

ist die setup.py, die feine

from distutils.core import setup 
import py2exe 
setup(console=['dependency_checker.py'], 
    options={'py2exe': {"dll_excludes": ["mswsock.dll", "MSWSOCK.dll"]}} 
    ) 
+0

mswsock.dll arbeitet war kein Problem für mich, aber powrprof.dll war. Also meine dll_excludes sind jetzt ["mswsock.dll", "POWRPROF.dll"]. Grundsätzlich sollte py2exe POWRPROF.dll nicht versenden, sondern die Version der DLL verwenden, die auf dem System verfügbar ist. – Jim

+0

das funktioniert wirklich !! Vielen Dank –