make - python to exe
Py2exe lxml problemas (2)
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, al crear un archivo ejecutable con py2exe, recibí este error
ImportError: No module named _elementpath
Luego utilicé python setup.py py2exe -p lxml
y no obtuve el error anterior, pero sí otro.
ImportError: No module named gzip
¿Alguien podría decirme cuál es el problema 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, ¿quizás no sean necesarios?
Gracias.
Edición: Acabo de intentar con python setup.py py2exe -p -i gzip
y se creó el python setup.py py2exe -p -i gzip
. Pero el exe generado no se ejecuta. Hago doble clic y no hace nada.
Aquí está el script setup.py que estoy usando
from py2exe.build_exe import py2exe
from distutils.core import setup
setup( windows=[{"script": "gui.py"}] )
Edit2: intenté usar cx_freeze como alternativa, pero obtuve lo mismo
ImportError: No module named _elementpath
error. No sabía cómo proceder después de eso.
A veces necesitará realizar 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". Luego instálelo de nuevo forzando a easy_install a descomprimir el archivo con la opción "-Z" como sigue (tuve el problema con el paquete paramiko):
pip uninstall paramiko
easy_install -Z paramiko
Py2exe le permite especificar paquetes / módulos adicionales para incluir con el argumento de las options
de setup()
, en caso de que no se detecten automáticamente. Lo 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 descubrí recientemente PyInstaller , que tiene soporte incorporado para una serie de paquetes conocidos, incluyendo lxml, por lo que también podría valer la pena intentarlo.