2010-02-08 21 views
5

Estoy intentando crear un ejecutable para Windows para una aplicación GUI en tkinter usando el módulo ttk. Hice un exe con cx_Freeze, pero cuando corro la aplicación en la consola me da el siguiente error:cx_Freeze ImportError: no se puede importar el nombre

D:\My Dropbox\python\SAR Calculator\src\dist_tk> 
Traceback (most recent call last): 

    File "C:\Python31\lib\site-packages\cx_Freeze\ 
7, in <module> 

    exec(code, m.__dict__) 

    File "sarcalc_tk.py", line 14, in <module> 

    File "C:\Python31\lib\tkinter\__init__.py", li 

    from tkinter import _fix 

ImportError: cannot import name _fix 

Aquí están las líneas 14 y 15 de mi código:

import tkinter as tk 
import tkinter.ttk as ttk 

Respuesta

5

Parece que cx_Freeze no se da cuenta de que debe incluir el módulo tkinter._fix, que se importa condicionalmente por tkinter/__init__.py. Se puede decir que para incluir ese módulo explícitamente con el argumento --include-modules de línea de comandos, o el argumento includes palabra clave para cx_Freeze.Executable en su setup.py

+0

gracias, pero ahora tengo un error con init.tcl, resuelvo este manualy includig tcl8.5 y la carpeta tk8.5 en la carpeta dist, pero creo que no es la mejor solución. – Alquimista

+0

Correcto, la congelación en general no es la mejor solución :) La aplicación de congelación (py2exe, cx_Freeze, py2app, etc.) necesita saber exactamente qué empaquetar. Todos intentan adivinar qué módulos de Python necesitan incluir, pero como has visto, a veces fallan. Las dependencias en otros archivos no pueden manejarse automáticamente, por lo que siempre son problemáticas. –

Cuestiones relacionadas