python - El programa tkinter se compila con cx_Freeze pero el programa no se iniciarĂ¡
python-3.x cx-freeze (3)
Después de probar un ejemplo de hello world aún más simple escribiendo en la consola (que también falló) me encontré con el culpable.
Después de actualizar mi archivo freezer.py con el código encontrado here y usar el archivo setup.py provisto por jpeg, mi aplicación de ejemplo funcionó. Gracias a ambos por su rápida respuesta.
Estoy tratando de crear un ejecutable siguiendo este tutorial
https://github.com/anthony-tuininga/cx_Freeze/tree/master/cx_Freeze/samples/Tkinter
Después de algunos ajustes, puedo compilar el proyecto, pero cuando hago clic en el archivo .exe, la animación de carga del mouse se dispara pero nunca se carga nada. Estas preguntas se han hecho anteriormente pero nunca se resolvieron.
¿Dónde comenzar a buscar en el código cuando su .exe no funciona después de cx_freeze?
Mi archivo de aplicación
from tkinter import *
from tkinter import messagebox
root = Tk()
root.title(''Button'')
print("something")
new = messagebox.showinfo("Title", "A tk messagebox")
root.mainloop()
my setup.py
import sys
from cx_Freeze import setup, Executable
base = None
if sys.platform == ''win32'':
base = ''Win32GUI''
executables = [
Executable(''SimpleTkApp.py'', base=base)
]
setup(name=''simple_Tkinter'',
version=''0.1'',
description=''Sample cx_Freeze Tkinter script'',
executables= [Executable("SimpleTkApp.py", base=base)])
También he estado agregando manualmente las bibliotecas TCL / TK
set TK_LIBRARY=C:/.../tk8.6 etc
Mi configuración: python 3.7, cx_Freeze 5.1.1
Cualquier ayuda sería muy apreciada, ni siquiera sé por dónde empezar en este caso.
Intente modificar su
setup.py
siguiente manera:
import sys
from cx_Freeze import setup, Executable
import os
PYTHON_INSTALL_DIR = os.path.dirname(sys.executable)
os.environ[''TCL_LIBRARY''] = os.path.join(PYTHON_INSTALL_DIR, ''tcl'', ''tcl8.6'')
os.environ[''TK_LIBRARY''] = os.path.join(PYTHON_INSTALL_DIR, ''tcl'', ''tk8.6'')
include_files = [(os.path.join(PYTHON_INSTALL_DIR, ''DLLs'', ''tk86t.dll''), os.path.join(''lib'', ''tk86t.dll'')),
(os.path.join(PYTHON_INSTALL_DIR, ''DLLs'', ''tcl86t.dll''), os.path.join(''lib'', ''tcl86t.dll''))]
base = None
if sys.platform == ''win32'':
base = ''Win32GUI''
executables = [Executable(''SimpleTkApp.py'', base=base)]
setup(name=''simple_Tkinter'',
version=''0.1'',
description=''Sample cx_Freeze Tkinter script'',
options={''build_exe'': {''include_files'': include_files}},
executables=executables)
Esto debería funcionar para
cx_Freeze
versión 5.1.1 (la versión actual).
En esta versión, los módulos incluidos se encuentran en una
lib
de subdirectorios del directorio de compilación.
Si usa 5.0.1 o una versión anterior, configure
include_files = [os.path.join(PYTHON_INSTALL_DIR, ''DLLs'', ''tk86t.dll''),
os.path.join(PYTHON_INSTALL_DIR, ''DLLs'', ''tcl86t.dll'')]
en lugar.
Consulte también Cómo obtener "ImportError: error de carga de DLL: no se pudo encontrar el módulo especificado" cuando se usa cx_Freeze incluso con tcl86t.dll y tk86t.dll agregados y python tkinter exe creado con cx_Freeze para Windows no mostrará GUI
EDITAR:
Otro problema es que
cx_Freeze
tiene un error con python 3.7 que aún no se ha corregido.
Ver
Cx_freeze bloqueando Python3.7.0
.
Puede encontrar un enlace a una corrección de errores que debe aplicar manualmente (de acuerdo con el OP esto resolvió el problema, vea los comentarios).
Tengo un setup.py que funciona aquí. Tal vez pueda intentar ver si funciona después de usar la misma configuración. Básicamente, a veces, después de compilar, faltan los paquetes tk y tcl dll / packages, por lo que debe incluirlos durante la configuración.
import sys, os
from cx_Freeze import setup, Executable
includes = []
include_files = [r"C:/Users/user/AppData/Local/Programs/Python/Python36-32/DLLs/tcl86t.dll",
r"C:/Users/user/AppData/Local/Programs/Python/Python36-32/DLLs/tk86t.dll"]
base = ''Win32GUI'' if sys.platform == ''win32'' else None
os.environ[''TCL_LIBRARY''] = r''C:/Users/user/AppData/Local/Programs/Python/Python36-32/tcl/tcl8.6''
os.environ[''TK_LIBRARY''] = r''C:/Users/user/AppData/Local/Programs/Python/Python36-32/tcl/tk8.6''
setup(name="simple_Tkinter",
version="0.1",
options={"build_exe":{"includes":[],"include_files":include_files}},
description="Sample cx_Freeze Tkinter script",
executables=[Executable("SimpleTkApp.py",base=base)])