cx_Freeze ImportError: 无法导入名称

5
我正在尝试使用ttk模块在tkinter中为Windows创建可执行文件。我使用cx_freeze创建了一个exe文件,但是当我在控制台中运行应用程序时,它会给出以下错误:
    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

这是我代码中的第14行和第15行:

import tkinter as tk
import tkinter.ttk as ttk
1个回答

5

看起来cx_freeze没有意识到它应该包含tkinter._fix模块,这个模块是由tkinter/__init__.py有条件地导入的。您可以使用--include-modules命令行参数或setup.pycx_Freeze.Executableincludes关键字参数明确地告诉它要包含该模块。


谢谢,但现在我遇到了init.tcl的错误,我手动解决了这个问题,将tcl8.5和tk8.5文件夹包含在dist文件夹中,但我认为这不是最好的解决方案。 - Alquimista
没错,冻结通常不是最佳解决方案 :) 冻结应用程序(py2exe、cx_Freeze、py2app 等)需要精确地知道要打包哪些内容。它们都试图猜测哪些 Python 模块需要包括在内,但正如你所见,它们有时会失败。对其他文件的依赖关系无法自动处理,因此它们总是有问题的。 - Thomas Wouters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接