2009-09-17 22 views
7

no puedo hacer py2exe para empacar correctamente incluso un simple script que utiliza win32file constantemente estoy recibiendo el siguiente mensaje de error:Problema con la carga win32file.pyd en 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. 

El guión parece de la siguiente manera:

import win32file 
print "Hello world!" 

Y aquí está el setup.py:

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

Hav ¿Tuviste un problema similar antes?

Versiones:

Python 2.6.2, 0.6.9 py2exe, pywin32-214, Windows 7 y Windows XP Pro como equipo de destino

ACTUALIZACIÓN:

  • puedo correr el programa incluido en mi Windows 7 donde fue creado, pero no puedo ejecutarlo en la máquina XP.
  • La parte de win32file.pyc que arroja el error se ve de la siguiente manera:

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

La línea anterior en mi caja dev (Windows 7) se ejecuta correctamente mientras que los retornos de caja de prueba (Windows XP) el error.

** ACTUALIZACIÓN 2: **

Cuando uso imp.load_dynamic para cargar win32file instalación pitón forma entonces puedo recargar la win32file.pyd para la carpeta dist sin el error.

Respuesta

9

La idea era eliminar MSWSOCK.dll que se copió incorrectamente en el directorio dist por py2exe.

He utilizado procmon y listdll para comprobar qué carga win32file.pyd cuando la importación se realiza correctamente y qué dll se cargan cuando falla la importación. Luego tengo la lista de dlls que he comprobado si están cargados correctamente, es decir. python dlls de la carpeta dist y windows dlls de la carpeta windows.

Aquí es el setup.py que funciona bien

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

mswsock.dll no era un problema para mí, pero era powrprof.dll. Entonces mi dll_excludes ahora es ["mswsock.dll", "POWRPROF.dll"]. Básicamente, py2exe no debe enviar POWRPROF.dll, pero utiliza la versión de la DLL disponible en el sistema. – Jim

+0

que realmente funciona !! Gracias –