python python-3.x tkinter cx-freeze

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.

¿Cuál podría ser la razón del error fatal de Python: initfsencoding: no se puede cargar el códec del sistema de archivos?

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)])