Ubuntu18.04下Python3.12的tkinter安装及matplotlib报错解决
解决Ubuntu 18.04下Python 3.12编译后tkinter缺失及matplotlib多进程运行问题
一、核心问题拆解
你遇到的两个错误分属两类问题:
- 初始报错
FigureCanvasAgg is non-interactive, and thus cannot be shown:matplotlib默认使用非交互式的Agg后端,无法弹出图形窗口; - 后续
ModuleNotFoundError: No module named '_tkinter':源码编译Python 3.12时未正确集成tkinter依赖。
二、解决_tkinter缺失问题(针对源码编译的Python 3.12)
Ubuntu 18.04自带的python3-tk仅适配系统默认的Python 3.6,源码编译高版本Python需手动确保依赖安装并被编译流程检测到:
- 安装完整tk依赖
sudo apt-get update sudo apt-get install tk-dev tcl-dev libtk-img
- 清理旧编译缓存(关键步骤,若之前编译过Python必须执行)
进入Python源码解压目录,执行:
make clean
- 重新配置并编译Python
配置时默认会自动检测tk依赖,执行:
./configure --enable-optimizations make -j$(nproc) sudo make altinstall
注意用
altinstall而非install,避免覆盖系统自带Python。
- 验证tkinter集成结果
启动Python 3.12,执行以下代码:
import tkinter tkinter._test()
若弹出tk测试窗口,说明集成成功。
三、解决matplotlib多进程显示问题
无需强行导入tkinter解决初始错误,根据场景选择对应方案:
- 仅需生成图片文件(无窗口需求)
直接使用Agg后端,在代码开头添加:
import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt
绘图后用plt.savefig('output.png')保存图片,替代plt.show()。
- 需要弹出交互式窗口
确保tkinter集成成功后,将matplotlib后端设置为TkAgg:
import matplotlib matplotlib.use('TkAgg') import matplotlib.pyplot as plt import tkinter
再运行多进程代码即可。
- 多进程场景额外注意
matplotlib多进程绘图时,需保证每个进程独立初始化matplotlib,避免共享状态。官方示例已做处理,若仍有问题,可在每个进程的绘图函数内重新初始化后端设置。
内容的提问来源于stack exchange,提问作者Laut567
相关产品推荐
相关产品推荐

