Fatal error con PyInstaller y otros metodos de empaquetado de scripts python

Iniciado por Silver1101, 25 Septiembre 2019, 13:51 PM

0 Miembros y 1 Visitante están viendo este tema.

Silver1101

Hola compañeros

He empezado hace poco con la programación Python, y me he encontrado con un problema que me esta dando bastantes quebraderos de cabeza.

Resulta que trato de empaquetar mis scripts en archivos ejecutables .app o .exe y no soy capaz de conseguirlo ni en windows ni en mac. He probado con PyInstaller py2app (en mac) y py2exe (en windows).

Con Pyintaller lo consigo solo con scripts ejecutables en shell "los tipicos print("hola mundo")". Pero cuando el programa es un GUI con tkinter es cuando me genera el problema. Cuando utilizo py2app, me genera el archivo.app sin problema, en la temrinal me sale todo OK, pero a la hora de ejecutarlo me aparece un Fatal error, y instantaneamente me reinicia la sesión del mac.

En los tutoriales que aparecen en youtube, en los manuales de python, y diferentes paginas realizan el procedimiento con muchisima facilidad. Pero yo me encuentro con un porblema detrás de otro.

¿Alguien ha topado con los mismos problemas?¿Como lo resolvisteis?
¿Que metodo utilizais vosotros para empaquetar vusestros scripts? ¿Cual considerais más sencillo?


EdePC

Saludos,

- En caso de PyInstaller, podría ser un problema de referencias si estás utilizando --onefile, revisa este Post: https://foro.elhacker.net/scripting/icono_en_python_con_tkinter-t491930.0.html

- Si el problema es otro, tendrías que detallar más o compartir el código preblemático para analizarlo en "propias carnes".

Silver1101

#2
Muchas gracias por tu respuesta.

El error real es lo que no soy capaz de identificar.
Yo creo que algo me fatla por instalar o añadir en algun sitio porque cuando intento ejecutar el script compilado (ahora estoy hablando de pyinstaller en mac) me aparece el siguiente mensaje:

macbook-2:~ usuario$ /Users/usuario/Desktop/p/dist/app ; exit;
Traceback (most recent call last):
 File "site-packages/PyInstaller/loader/rthooks/pyi_rth__tkinter.py", line 28, in <module>
FileNotFoundError: Tcl data directory "/var/folders/_w/kq6md5vj4wg5nf8jq4bhc2ww0000gn/T/_MEIRLEfIp/tcl" not found.
[1442] Failed to execute script pyi_rth__tkinter

logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

[Proceso completado]


Lo que está en negrita es lo que no entiendo. Pone que hay un error para ejecutar el script pyi_rth__tkinter.py    ¿Pero donde se supone que debe estar ese script si yo ya tengo la libreria tkinter intalada previamente??

Silver1101

Problema encontrado

El problema principal con PyInstaller y Mac es que solo funciona en versiones de MacOS anteriores a la 10.14.6, la nueva versión de MacOS tiene un error con las aplicaciones tkinter y dejan de funcionar, en el momento en que se ejecutan estas aplicaciones, el sistema se congela y vuelve a la pantalla de inicio de sesión.

Aquí he encontrado la explicación más detallada:
https://discussions.apple.com/thread/250549297

A través de este enlace encontré varias posibles soluciones al respecto:
https://github.com/pyinstaller/pyinstaller/issues/3753

Pero yo las he probado y no me han funcionado.

Solucion final: He probado PyInstaller con GUI creados con PyQt5 en vez de tkinter y funciona perfecto!!  Así que el problema está en tkinter.

Espero que esto sirva para orientar a otras personas que hayan tenido el mismo problema. Un saludo!!




WHK

Hola, recuerda que esas aplicaicones de empaquetado no son oficiales por lo cual no puedes esperar a que siempre funcionen bien o que no tengan problemas al momento de distribuirlos, python no tiene la capacidad de generar binarios ejecutables sin depender del interpretador.

Lo que tu estás buscando es golang, es un lenguaje scripting que tiene la capacidad nativa de compilar los scripts a binarios ejecutables compatibles con cualquier sistema operativo, ya sea windows mac o linux, el único problema es que su sintaxis es un poco tediosa y la curva de aprendizaje es muy alta, pero el performance es muy bueno.

Mira:

https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/go-python3.html
https://medium.com/rungo/working-in-go-workspace-3b0576e0534a
https://bugs.python.org/issue38280

Saludos.

Silver1101

Si, he estado mirando golang, pero parece bastante más complicado sobretodo para novatos como yo. De momento voy a seguir con python, mientras funcione en mi ordenador ya tengo suficiente.

Muchisimas gracias por tu aportación!!