2009-09-17 22 views
7

non posso fare py2exe per il confezionamento correttamente anche un semplice script che utilizza win32file sono costantemente ricevendo il seguente messaggio di errore:Problema con caricamento win32file.pyd su 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. 

Lo script sembra come segue:

import win32file 
print "Hello world!" 

Ed ecco il setup.py:

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

Hav e hai avuto un problema simile prima?

Versioni:

Python 2.6.2, 0.6.9 py2exe, pywin32-214, Windows 7 e Windows XP Pro come macchina di destinazione

UPDATE:

  • posso correre il programma in bundle su Windows 7 in cui è stato creato ma non riesco a eseguirlo sulla macchina XP.
  • La parte del win32file.pyc che genera l'errore si presenta come segue:

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

La linea di cui sopra sulla mia casella di dev (Windows 7) viene eseguito correttamente, mentre sulla scatola di prova (Windows XP) restituisce l'errore.

** AGGIORNAMENTO 2: **

Quando uso imp.load_dynamic caricare win32file installazione python forma allora posso ricaricare il win32file.pyd per la cartella dist, senza l'errore.

risposta

9

Il soution doveva rimuovere MSWSOCK.dll che è stato copiato in modo errato nella directory dist da py2exe.

Ho usato procmon e listdll per controllare cosa viene caricato da win32file.pyd quando l'importazione ha esito positivo e quale dll viene caricata quando l'importazione fallisce. Poi ho la lista delle DLL che ho controllato se sono state caricate correttamente, cioè. python dlls da dist folder e windows dll dalla cartella windows.

Ecco la setup.py che funziona bene

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

mswsock.dll non era un problema per me, ma era Powrprof.dll. Quindi le mie dll_excludes sono ora ["mswsock.dll", "POWRPROF.dll"]. Fondamentalmente, py2exe non dovrebbe spedire POWRPROF.dll ma usare la versione della DLL disponibile sul sistema. – Jim

+0

che funziona davvero !! Grazie –

Problemi correlati