Conseguir que py2exe funcione con zope.interface

Tengo una aplicación Python basada en Twisted y PyGTK. Twisted sí depende de zope.interface, y no lo importo directamente.

Desafortunadamente, cuando bash ejecutar mi aplicación, el siguiente error termina en el registro de errores:

Traceback (most recent call last): File "tasks.py", line 4, in  File "ui\__init__.pyc", line 14, in  File "twisted\python\log.pyc", line 17, in  ImportError: No module named zope.interface Traceback (most recent call last): File "tasks.py", line 4, in  File "ui\__init__.pyc", line 14, in  File "twisted\python\log.pyc", line 17, in  ImportError: No module named zope.interface Traceback (most recent call last): File "tasks.py", line 4, in  File "ui\__init__.pyc", line 14, in  File "twisted\python\log.pyc", line 17, in  ImportError: No module named zope.interface 

He intentado agregar todas las combinaciones de zope.interface y zope a INCLUDES y PACKAGES , pero al hacerlo solo me da este error de tiempo de comstackción :

 running py2exe *** searching for required modules *** C:\Python26\lib\site-packages\py2exe\build_exe.py:16: DeprecationWarning: the sets module is deprecated import sets Traceback (most recent call last): File "setup.py", line 75, in  'gtk/*.ui' File "C:\Python26\lib\distutils\core.py", line 152, in setup dist.run_commands() File "C:\Python26\lib\distutils\dist.py", line 975, in run_commands self.run_command(cmd) File "C:\Python26\lib\distutils\dist.py", line 995, in run_command cmd_obj.run() File "C:\Python26\lib\site-packages\py2exe\build_exe.py", line 243, in run self._run() File "C:\Python26\lib\site-packages\py2exe\build_exe.py", line 296, in _run self.find_needed_modules(mf, required_files, required_modules) File "C:\Python26\lib\site-packages\py2exe\build_exe.py", line 1306, in find_needed_modules mf.import_hook(f) File "C:\Python26\lib\site-packages\py2exe\mf.py", line 719, in import_hook return Base.import_hook(self,name,caller,fromlist,level) File "C:\Python26\lib\site-packages\py2exe\mf.py", line 136, in import_hook q, tail = self.find_head_package(parent, name) File "C:\Python26\lib\site-packages\py2exe\mf.py", line 204, in find_head_package raise ImportError, "No module named " + qname ImportError: No module named zope 

Mi setup.py es:

 from distutils.core import setup import py2exe def find_data_files(source,target,patterns): # I've elided this, I doubt it's relevant to the problem # ... INCLUDES = [ 'cairo', 'pango', 'pangocairo', 'atk', 'gobject', 'gio', ] PACKAGES = [ 'encodings', ] setup( name = 'MyApp', description = 'My Application', version = '1.0', windows = [ { 'script': os.path.join('ui','tasks.py'), 'icon_resources': [ (1, os.path.join( 'ui','data','iconpack.ico')) ], } ], options = { 'py2exe': { 'packages': ','.join(PACKAGES), 'includes': ','.join(INCLUDES), } }, data_files = find_data_files( 'ui', 'ui', [ 'data/*', 'gtk/*.ui' ]) ) 

¿Cómo consigo py2exe para construir esto?

    He tenido este mismo problema con zope.interface y amigos (zope.component, et al). Específicamente, es un problema con cómo py2exe busca y descubre los paquetes Y cómo se instalan los paquetes de zope .

    zope es un paquete de espacio de nombres y, como resultado, se basa en una lógica de importación funky en .pth archivos .pth (vea zope.interface-3.*.*-py2.*-nspkg.pth ) para agregar sus zope.interface-3.*.*-py2.*-nspkg.pth a python’s camino. Míralo en site-packages y verás lo que quiero decir.

    py2exe tiene problemas para “descubrir” este tipo de paquete.

    Al final, lo que hice fue volver a empaquetar manualmente los diversos paquetes de zope que estaba usando en la configuración de un módulo estándar en site-packages y luego volver a ejecutar py2exe , que luego descubrió que no había ningún problema. Es un PITA, pero hasta que py2exe sea ​​capaz de manejar casos de borde de empaquetado y / o los paquetes de zope se empaquetan de manera amigable con py2exe , es lo mejor que puede hacer.

    No sé si alguna vez resolvió esto, o si ya es relevante para usted, pero para futuros buscadores, encontré una manera fácil de solucionar el problema de importación de zope aquí .

    Específicamente, agregue un archivo __init__.py vacío al __init__.py PYTHONDIR/Lib/site-packages/zope .

    Probé esto con una aplicación twisted , usando este archivo de configuración:

     #!/usr/bin/env python ''' File: setup.py Author: Spencer Rathbun Date: 07/24/2012 Description: Setup file for py2exe, converts client python script into executable. ''' from distutils.core import setup import py2exe INCLUDES = [ '' ] PACKAGES = [ 'twisted' ] setup( name = 'client', description = '', version = '1.0', console = [ {"script":"client.py", "icon_resources":[ (1, "c:\python27\DLLs\py.ico") ] } ], zipfile = None, options = {"py2exe": {"compressed": 1, "optimize": 1, "ascii": 0, "bundle_files": 1, "packages": ','.join(PACKAGES), "includes": ','.join(INCLUDES), } } ) 

    Py2exe puede usar esto para crear con éxito un ejecutable para trenzado ahora, ya que depende de zope.

    Me enfrentaba a este problema al crear un paquete con py2exe en Windows XP SP3. Me di cuenta de que py2exe no estaba determinando las dependencias correctamente.

    Para resolver este problema, desinstalé mis paquetes de terceros y los instalé usando el siguiente comando easy_install

    easy_install -Z

    La opción -Z descomprime los detalles del paquete y, por lo tanto, el contenido no está comprimido. Cuando ejecute py2exe ahora, detectará correctamente las dependencias.

    ¡Espero que esto ayude!