PyInstaller打包exe运行时报matplotlib缺失ImportError该如何解决?
问题原因
PyInstaller打包时无法自动识别所有间接依赖:
- 你指定的
TkAgg后端依赖的matplotlib.backends.backend_tkagg模块、tkinter相关组件没有被打包进去 - pandas调用绘图接口时依赖的
pandas.plotting._matplotlib后端模块属于隐含导入,没有被PyInstaller捕获 - matplotlib运行所需的
mpl-data配置目录没有被打包到exe的运行环境中
解决方案
按以下步骤依次尝试即可解决:
- 第一步:补充全隐含导入参数后重新打包
执行打包命令:
pyinstaller --hidden-import=openpyxl --hidden-import=matplotlib --hidden-import=matplotlib.backends.backend_tkagg --hidden-import=pandas.plotting._matplotlib --hidden-import=tkinter --onefile DT_070621.py
如果你的程序没有控制台输出需求,可以加上--windowed参数避免运行时弹出黑框。
- 第二步:脚本头部添加matplotlib运行配置
在你原有所有导入语句之前,添加如下配置代码:
import os import sys # 适配PyInstaller运行时的临时目录路径 if getattr(sys, 'frozen', False): os.environ['MATPLOTLIBDATA'] = os.path.join(sys._MEIPASS, 'mpl-data') import matplotlib # 强制指定绘图后端 matplotlib.use('TkAgg') import pandas as pd pd.set_option('plotting.backend', 'matplotlib')
添加完成后再执行第一步的打包命令。
- 第三步:通过spec文件打包matplotlib配置目录
如果前两步仍未解决,先执行命令生成spec配置文件:
pyi-makespec --onefile DT_070621.py
打开生成的DT_070621.spec文件,找到datas = []的行,替换为:
from PyInstaller.utils.hooks import collect_data_files datas = collect_data_files('matplotlib')
保存后执行spec文件完成打包:
pyinstaller DT_070621.spec
注意:打包全程需要在你Pycharm运行脚本正常的同个虚拟环境中执行,避免全局环境和虚拟环境依赖不一致导致打包错误。
内容的提问来源于stack exchange,提问作者Laila Campos
相关产品推荐
相关产品推荐

