Pregunta

No puedo hacer py2exe para empacar correctamente, incluso un script simple que utiliza win32file Recibo constantemente el siguiente mensaje de error:

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 script tiene el siguiente aspecto:

import win32file
print "Hello world!"

Y aquí está el setup.py:

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

¿Has tenido un problema similar antes?

Versiones:

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

UPDATE:

  • Puedo ejecutar 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 es la siguiente:

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

La línea anterior en mi cuadro de desarrollo (Windows 7) se ejecuta correctamente mientras que en el cuadro de prueba (Windows XP) devuelve el error.

** ACTUALIZACIÓN 2: **

Cuando uso imp.load_dynamic para cargar la instalación de python del formulario win32file, puedo volver a cargar win32file.pyd para la carpeta dist sin el error.

¿Fue útil?

Solución

El objetivo era eliminar MSWSOCK.dll que fue copiado incorrectamente en el directorio dist por py2exe.

He usado procmon y listdll para verificar qué carga win32file.pyd cuando la importación es exitosa y qué dll se carga cuando falla la importación. Luego de tener la lista de dlls he comprobado si están cargados correctamente, es decir. python dlls desde la carpeta dist y windows dlls desde la carpeta windows.

Aquí está 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"]}}
     )
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top