我已经构建了一个使用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,但是我没有找到像这样的直接依赖的任何细节。
任何想法如何使这个工作?
答案 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',]
安格斯