PyInstaller:“没有名为Tkinter的模块”

时间:2016-05-08 22:08:06

标签: python-2.7 tkinter pyinstaller

我已经构建了一个使用Tkinter的Python(2.7)应用程序,并尝试使用Pyinstaller(3.2)构建Windows7 .exe。在Windows中找到的应用程序工作是我运行它python myapp.py,但一旦编译成pyinstaller distributable,我收到此错误消息:

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 itslef,但是我没有找到像这样的直接依赖的任何细节。

任何想法如何使这个工作?

3 个答案:

答案 0 :(得分:2)

检查https://github.com/pyinstaller/pyinstaller/issues/1584。 PIL挂钩存在问题,它排除了tkinter模块。

一种解决方案是通过从excludedimports中删除 modname_tkinter 来修改位于YourPythonFolder \ Lib \ site-packages \ PyInstaller \ hooks中的钩子文件hook-PIL.py。

或者只是更改代码中import语句的顺序。做:

from PIL import ImageTk
import Tkinter as tk

答案 1 :(得分:0)

您检查过:https://github.com/pyinstaller/pyinstaller/issues/1877(或其他问题)? https://github.com/pyinstaller/pyinstaller/wiki/If-Things-Go-Wrong

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

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

答案 2 :(得分:0)

我扩展了这个问题。将Tkinter包含在隐藏的导入列表中使我能够显示图,但是我无法保存它们。通过将FileDialog,tkFileDialog和tkMessageBox添加到我的spec文件中的隐藏导入中,解决了该问题。也就是说,hiddenimports = ['FileDialog','Tkinter','tkFileDialog','tkMessageBox',]

安格斯