PyInstaller:“No module named Tkinter”

5
我已经开发了一个使用Tkinter的Python(2.7)应用程序,现在正在尝试使用Pyinstaller(3.2)构建Windows7的.exe文件。如果我使用命令“python myapp.py”在Windows上运行该应用程序,它可以正常工作,但是一旦编译成Pyinstaller可分发文件时,我会收到以下错误消息:
ImportError: No module named Tkinter

为确保正确,myapp.py的顶部应包括:

from copy import deepcopy
import cPickle as pickle
import Tkinter as tk
from PIL import ImageTk

检查分发目录,我看到了tk85.dll,tcl85.dll和两个相关的目录,tcl/和tk/。

我找到了许多关于Tkinter次要依赖项的参考资料,例如matplotlib导入Tkinter本身,但我没有找到任何有关直接依赖项的详细信息。

有什么想法可以让这个工作起来吗?


我将一个Python脚本转换为exe,但发现PyInstaller会出现问题。尝试使用Cx_Freeze来完成转换,它非常方便且效果很好。 - AR06
不知道那个。我会尝试一下,等我弄明白了再回报。 - KirkD-CO
我尝试了cx_Freeze,现在离成功更近了。我不得不排除一些包以避免某些包错误。但现在,我卡在了字体问题上。我使用的其中一个包也使用Pillow和一些PIL字体。我已经找到了包存储字体的位置,但无法完全设置好它们。我将它们直接复制到build/exe目录中,但没有成功。我还看到了cx_Freeze文档中关于包含数据文件的部分,但我不确定如何使其工作。 - KirkD-CO
3个回答

2
请查看https://github.com/pyinstaller/pyinstaller/issues/1584。PIL钩子存在问题,会排除tkinter模块。
一种解决方法是修改钩子文件hook-PIL.py,该文件位于YourPythonFolder\Lib\site-packages\PyInstaller\hooks中,将modname_tkinter从excludedimports中删除。
或者只需更改代码中导入语句的顺序。请执行:
from PIL import ImageTk
import Tkinter as tk

不错的解决方案。请注意,使用 from Tkinter import * 更改导入顺序是行不通的,但可以像上面那样轻松解决。 - tfv

0
我对这个问题有一个扩展。将Tkinter包含在隐藏导入列表中可以显示图表,但无法保存。通过在我的spec文件中添加FileDialog、tkFileDialog和tkMessageBox到隐藏导入中解决了这个问题,即hiddenimports=['FileDialog', 'Tkinter', 'tkFileDialog', 'tkMessageBox', ]。
Angus

0

你有检查过这个链接吗:https://github.com/pyinstaller/pyinstaller/issues/1877(或其他问题)? https://github.com/pyinstaller/pyinstaller/wiki/If-Things-Go-Wrong

引用自问题1877:“看起来hook-_tkinter.py无法处理自定义编译的Tk。” 可能的解决方法:“谢谢,使用yum安装了tkinter、tix、tcl-devel和tk-devel之后,现在它可以正常工作了。”

否则,Py2exe也是创建.exe文件的选项,我已经多次使用它与tkinter没有任何问题。


我没有看到过那个。我没有使用自定义构建,但我会尝试安装额外的软件包。我会尝试并在这里报告结果。 - KirkD-CO
很遗憾,我发现我已经安装了所有这些软件包。 - KirkD-CO
我也尝试了py2exe,并发现我必须添加一些DLL排除项(numpy-atlas.dll和MSVCP90.dll)。一旦编译完成,它就会失败,并出现许多日志条目,显示“ImportError:无法导入numpy.core.multiarray”。我已经搜索了解决方案,但没有找到解决方法。 - KirkD-CO

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