Py2exe – Win32api.pyc Error de carga de DLL ImportError

Estoy tratando de usar py2exe para distribuir una aplicación de python que he escrito. Todo parece ir bien, pero cuando lo ejecuto en otra máquina falla con el siguiente error:

Traceback (most recent call last): File "application.py", line 12, in  File "win32api.pyc", line 12, in  File "win32api.pyc", line 10, in __load ImportError: DLL load failed: The specified procedure could not be found. 

He buscado en Google para esto y no he encontrado mucho, pero he intentado las siguientes sugerencias en vano:

Pywintypes y pythoncom importados antes de win32api (en setup.py para py2exe y en la aplicación principal) Se agregó algo de código a setup.py –

 # ModuleFinder can't handle runtime changes to __path__, but win32com uses them import pywintypes import pythoncom import win32api try: # if this doesn't work, try import modulefinder import py2exe.mf as modulefinder import win32com for p in win32com.__path__[1:]: modulefinder.AddPackagePath("win32com", p) for extra in ["win32com.shell"]: #,"win32com.mapi" __import__(extra) m = sys.modules[extra] for p in m.__path__[1:]: modulefinder.AddPackagePath(extra, p) except ImportError: # no build path setup, no worries. pass 

Soy bastante nuevo en todo esto, por lo que cualquier ayuda sería muy apreciada

Gracias

Jon

He visto este problema cuando el paquete se creó en Vista pero se ejecutó en XP. El problema resultó ser que py2exe agregó por error powrprof.dll y mswsock.dll al paquete. Sin embargo, Windows XP contiene sus propias copias de estos archivos y no puede cargar los de Vista que se instalaron con su aplicación.

Eliminarlos del paquete hizo el truco, puede hacerlo fácilmente agregando esto a las options dict en setup.py

  'dll_excludes': [ "mswsock.dll", "powrprof.dll" ] 

@Wim, me pareció un poco confuso el poco acerca de “agregar esto a las opciones dict en setup.py”. Si, como yo, no tenía un argumento de opciones en su llamada actual a la configuración, esto podría aclarar las cosas:

 setup(name='myprog', ... options={"py2exe":{"dll_excludes":[ "mswsock.dll", "powrprof.dll" ]}}, ... ) 

Intente agregar win32api a sus paquetes, en el diccionario de opciones.

Aquí hay un ejemplo:

 excludes = ["pywin", "pywin.debugger"] # there will be more in real life... options = dict(optimize=2, dist_dir="build", excludes=excludes, packages=["win32api"]) setup( name="MyCoolApp", options=dict(py2exe=options), # etc ... 

Solo como un comentario añadido. Al reconstruir su progtwig con Py2exe, asegúrese de eliminar el antiguo directorio “dist”. Estuve sentado por más de 3 horas sin entender por qué mi aplicación estaba funcionando en mi entorno de desarrollo y no en producción. eliminado dist y reconstruir con py2exe y funcionó.