2011-03-15 13 views
22

Tengo una aplicación wxpython que depende de lxml y funciona bien cuando se ejecuta a través del intérprete de python. Sin embargo, cuando se crea un archivo EXE con py2exe, tengo este errorPy2exe lxml woes

ImportError: No module named _elementpath 

Luego utiliza python setup.py py2exe -p lxml y no me sale el error anterior pero otra diciendo

ImportError: No module named gzip 

Podría alguien que me haga saber lo el problema es y cómo puedo solucionarlo. ¿También debería poner cualquier archivo dll como libxml2, libxslt, etc. en mi carpeta dist? Busqué en la computadora y no encontré estos archivos, entonces tal vez no sean necesarios?

Gracias.

Editar: Acabo de probar con python setup.py py2exe -p -i gzip y se ha creado el exe. Pero el exe generado no se ejecuta. Lo hago doble clic y no hace nada.

Aquí está la secuencia de comandos setup.py estoy usando

from py2exe.build_exe import py2exe 
from distutils.core import setup 

setup(windows=[{"script": "gui.py"}]) 



Edit2: He intentado utilizar cx_Freeze como una alternativa, pero tengo el mismo error

ImportError: No module named _elementpath 

. No sabía cómo proceder después de eso.

Respuesta

37

Py2exe le permite especificar paquetes/módulos adicionales para incluir con el argumento options en setup(), en caso de que no se detecten automáticamente. El siguiente debería funcionar:

from distutils.core import setup 
import py2exe 

setup(
    windows=[{'script': 'gui.py'}], 
    options={ 
     'py2exe': 
     { 
      'includes': ['lxml.etree', 'lxml._elementpath', 'gzip'], 
     } 
    } 
) 

también he descubierto recientemente PyInstaller, que se ha incorporado en el apoyo a una serie de paquetes conocidos, incluyendo lxml, por lo que podría valer la pena probar también.

+1

Hola, su guión trabajado. gracias –

+0

Si quiere crearlo como ** ejecutable simple ** (sin pyc, dll, etc.) adicional, puede tenerlo de la siguiente manera: 'from distutils.core import setup; import py2exe, sys; sys.argv.append ('py2exe'); configuración ( \t windows = [{'script': 'your_script.py '}], \t archivo zip = Ninguno, \t opciones = { \t \t 'py2exe': \t \t { \t \t \t 'bundle_files': 1, \t \t \t 'comprimido': Es cierto, \t \t \t 'incluye': [ 'lxml.etree', 'lxml._elementpath', 'gzip'], \t \t} \t} ); ' –

0

A veces tendrá que hacer otra acción más después de modificar el archivo setup.py.

Como se describe here, debería ser necesario desinstalar el paquete si está instalado en el archivo "eggs". instalarlo de nuevo, obligando a easy_install dezip el archivo con la opción "-Z" de la siguiente manera (que tenía el problema con el paquete paramiko):

pip uninstall paramiko 
easy_install -Z paramiko