Matplotlib在独立(Exe)Python文件中的用法

时间:2020-08-18 14:10:30

标签: python matplotlib pyinstaller python-standalone

我无法通过Python脚本创建有效的 exe 文件。我能够将其范围缩小到matplotlib的用法,但是我不知道如何解决。

我使用pyinstaller --onefile myScript.py命令创建 exe 文件。 exe 是使用一些“忽略的”导入创建的,例如:

信息:Matplotlib后端“ GTK3Agg”:被忽略 后端Gtk3Agg需要开罗

当我运行 exe 时,会出现一个命令窗口,提示错误,然后终止自身:

错误:运行时错误找不到matplotlib数据文件

如果我从Python终端运行代码,一切正常。 如果删除matplotlib并绘制与图形相关的行,则会正确创建 exe

有些(pyinstaller and matplotlib - error while executring .exe)声称解决方案是更新pyinstaller。我做到了,但没有帮助。

有人建议不要使用pltPython Matplotlib runtime error upon closing the console),但是我无法使subplot函数正常工作。

我觉得此链接(http://www.py2exe.org/index.cgi/MatPlotLib)是相关的,但是我不知道我到底需要做什么。我尝试时遇到其他错误。

这是我的代码:

import  tkinter           as tk
import  tkinter.ttk       as ttk
import  matplotlib.pyplot as plt

class myApp(tk.Frame):
    def __init__(self, parent, *args, **kwargs):
        tk.Frame.__init__(self, parent, *args, **kwargs)
        self.parent = parent
        myFrame = ttk.LabelFrame(self.parent, text="FRAME", borderwidth=5)
        myFrame.grid(row=0, column=2, padx=5, pady=5, sticky='NS')
        myButton = ttk.Button(myFrame, width=12, text="SHOW GRAPH", command=self.showGraph)    .grid(row=0, column=1, sticky=tk.S)

    def showGraph(self):
        fig, axs = plt.subplots(2, 3)
        plt.show(block=False)


def main(root):
    app = myApp(root)
    root.wm_title("MyApp")
    root.mainloop()

if __name__ == "__main__":
    root = tk.Tk()
    main(root)
else:
    pass 

注意:我正在Windows 10(pip版本20.2.2)上运行Python 3.8.3。

1 个答案:

答案 0 :(得分:0)

如果您使用.spec文件,则必须在我的文件中添加它以消除该错误:

from PyInstaller.utils.hooks import exec_statement
mpl_data_dir = exec_statement("import matplotlib; print(matplotlib._get_data_path())")
datas=[(mpl_data_dir, 'matplotlib\\mpl-data')]

希望有帮助。