我已经处理了好几天了,希望能有所帮助。我用导入的模块tkinter,numpy,scipy,matplotlib开发了一个GUI应用程序,该模块在python本身中运行良好。转换为exe后,一切都按预期工作,但matplotlib节则无效。当我按定义的绘图按钮时,exe只是关闭而没有显示任何绘图。因此,我想举一个最小的例子,我只绘制了一个sin函数,而我面临着同样的问题:在python中工作完美,当将其转换为exe时,按下图按钮会崩溃。这是最小的示例:
import tkinter as tk import matplotlib.pyplot as plt import numpy as np class MainWindow(tk.Frame): def __init__(self): tk.Frame.__init__(self,bg='#9C9C9C',relief="flat", bd=10) self.place(width=x,height=y) self.create_widgets() def function(self): datax = np.arange(-50,50,0.1) datay = np.sin(datax) plt.plot(datax,datay) plt.show() def create_widgets(self): plot = tk.Button(self, text='PLOT', command=self.function) plot.pack() x,y=120,300 root=tk.Tk() root.geometry(str(x)+"x"+str(y)) app = MainWindow() app.mainloop()
这是我setup.py与cx_Freeze转换的对应项:
setup.py
import cx_Freeze import matplotlib import sys import numpy import tkinter base = None if sys.platform == "win32": base = "Win32GUI" executables = [cx_Freeze.Executable("test.py", base=base)] build_exe_options = {"includes": ["matplotlib.backends.backend_tkagg","matplotlib.pyplot", "tkinter.filedialog","numpy"], "include_files":[(matplotlib.get_data_path(), "mpl-data")], "excludes":[], } cx_Freeze.setup( name = "test it", options = {"build_exe": build_exe_options}, version = "1.0", description = "I test it", executables = executables)
任何可能解决该问题的想法都将受到高度赞赏。我正在使用64位Windows10计算机,并且正在使用带有Python 3.4.3的WinPython发行版。
在使用相同的 test.py 测试PyInstaller时,我找到了解决该问题的方法(或至少是一种解释)。我收到有关缺少dll文件的错误消息,该文件为 mkl_intel_thread.dll 。
我搜索了该文件,并在 numpy 文件夹中找到它。我将与 mkl _ *。dll 和 libiomp5md.dll 匹配的文件复制到了was创建的 test.exe 所在的目录中python setup.py build。此后,最小的 test.exe 在按下 图 按钮时显示了matplotlib窗口。
python setup.py build
这些文件位于文件夹 lib \ site-packages \ numpy \ core中 。