Linux Mint环境下matplotlib执行plt.plot()无响应挂起问题求助
问题原因
核心是系统执行apt upgrade后,系统层面的Qt5运行库版本更新,与conda环境中安装的pyqt依赖包版本不兼容。matplotlib默认加载的Qt5Agg后端调用冲突的Qt库时触发死锁,因此会在执行绘图相关函数时无响应,且无法通过Ctrl+C中断。
解决方案
- 方案1:更换matplotlib后端(优先尝试)
在导入matplotlib.pyplot前指定兼容的GUI后端,示例代码如下:
import matplotlib # 若需要弹窗显示图像,使用TkAgg后端 matplotlib.use('TkAgg') # 若仅需保存图像不需要弹窗,使用无GUI的Agg后端 # matplotlib.use('Agg') import matplotlib.pyplot as plt import numpy as np fig = plt.figure() x = np.random.randint(0, 10, 10) y = np.random.randint(0, 10, 10) plt.plot(x, y) plt.show()
如果运行提示找不到TkAgg后端,先执行sudo apt install python3-tk安装系统依赖。
测试正常后可修改配置永久生效:
- 进入日志中显示的配置目录:
cd /home/sjoerd/.config/matplotlib - 编辑(若不存在则新建)
matplotlibrc文件,添加一行:backend: TkAgg
保存后重启Python进程即可默认使用该后端。
- 方案2:清理matplotlib缓存
字体缓存损坏也可能导致绘图挂起,执行以下命令清理缓存后重试:
rm -rf /home/sjoerd/.cache/matplotlib/*
- 方案3:修复Qt依赖冲突
如果需要保留Qt5Agg后端,可通过以下两种方式解决版本冲突:
- 升级conda环境中的pyqt包,适配系统新版本Qt库:
conda activate <你的环境名称> conda install pyqt --update-deps
- 卸载conda环境中的pyqt包,让matplotlib直接调用系统层面的Qt库:
conda activate <你的环境名称> conda remove pyqt
内容的提问来源于stack exchange,提问作者sjoerdgitaar
相关产品推荐
相关产品推荐

