2009-09-17 13 views
7

nie mogę zrobić py2exe zapakować prawidłowo nawet prosty skrypt, który wykorzystuje win32file ja ciągle otrzymuję następujący komunikat o błędzie:problem z załadunkiem win32file.pyd na Pythona 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. 

Skrypt wygląda tak następująco:

import win32file 
print "Hello world!" 

A oto setup.py:

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

Hav Czy miałeś wcześniej podobny problem?

Wersje:

Python 2.6.2, 0.6.9, pywin32-214 py2exe, Windows 7 i Windows XP Pro w komputerze docelowym

UPDATE:

  • mogę uruchomić pakiet programu w moim systemie Windows 7, w którym został utworzony, ale nie mogę go uruchomić na komputerze XP.
  • Część z win32file.pyc że wyrzuca błąd wygląda następująco:

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

Linia powyżej na moim komputerze dev (Windows 7) działa prawidłowo, gdy na polu testowym (Windows XP) zwraca błąd.

** UPDATE 2: **

Gdy używam imp.load_dynamic załadować win32file instalacji Pythona formularza wtedy mogę przeładować win32file.pyd folderu dist bez błędu.

Odpowiedz

9

The soution miał usunąć plik MSWSOCK.dll, który został nieprawidłowo skopiowany do katalogu dist przez py2exe.

Użyłem procmon i listdll, aby sprawdzić, co jest ładowane przez win32file.pyd, kiedy import się powiedzie i jakie pliki DLL zostaną załadowane, gdy import się nie powiedzie. Następnie mając listę bibliotek dll, które sprawdziłem, czy są ładowane poprawnie, tj. Python dll z dist folder i bibliotek dll Windows z folderu Windows.

Oto setup.py że działa dobrze

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

mswsock.dll nie był problem dla mnie, ale POWRPROF.dll było. Więc moje dll_excludes są teraz ["mswsock.dll", "POWRPROF.dll"]. Zasadniczo py2exe nie powinien wysyłać POWRPROF.dll, ale użyć wersji biblioteki DLL dostępnej w systemie. – Jim

+0

to naprawdę działa! Dzięki –

Powiązane problemy