Problema al cargar win32file.pyd en python 2.6
-
10-07-2019 - |
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.
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"]}}
)