Ubuntu 16.04下IPython中matplotlib绘图后无法恢复终端命令行求助
解决Ubuntu 16.04下IPython中matplotlib绘图窗口关闭后终端卡住的问题
我之前在Ubuntu 16.04上也碰到过一模一样的问题,当时折腾了好久才找到根源——主要是matplotlib默认的后端和IPython的交互逻辑在这个系统版本里存在bug,导致关闭绘图窗口后终端的主线程被卡住,没法回到命令行状态。给你几个亲测有效的解决方案:
方案1:临时切换matplotlib后端
在你的代码开头先指定一个兼容性更好的后端,比如TkAgg或者Qt5Agg,再导入pyplot:
import matplotlib matplotlib.use('TkAgg') # 要是这个不行可以试试Qt5Agg,前提是系统装了对应依赖 from matplotlib import pyplot as plt import numpy as np x = np.linspace(-1.,1.,129) plt.plot(x,np.sin(x)) plt.show()
这样运行后关闭窗口,终端就能正常回到命令行,变量也会保留下来。
方案2:用IPython魔法命令配置交互模式
打开IPython后,先输入这条魔法命令:
%matplotlib tk
之后再运行你的绘图代码,关闭窗口后终端不会卡住,而且所有变量都能保留,想修改绘图内容直接调整代码重新运行就行。如果觉得每次打开IPython都输这个麻烦,可以把它加到IPython的配置文件里:
- 先生成配置文件(如果没有的话):
ipython profile create - 编辑
~/.ipython/profile_default/ipython_config.py,找到c.InteractiveShellApp.matplotlib这一行,改成:
c.InteractiveShellApp.matplotlib = 'tk'
这样每次启动IPython都会自动启用这个交互模式。
方案3:升级matplotlib版本
Ubuntu 16.04自带的matplotlib版本可能比较旧,存在这个后端阻塞的bug,你可以尝试升级到新版:
- 如果用pip管理包:
pip install --upgrade matplotlib - 如果用系统源:
sudo apt-get update && sudo apt-get install --upgrade python-matplotlib
升级后默认后端的问题大概率会被修复,不用额外配置就能正常使用。
简单说下原因:Ubuntu 16.04里matplotlib默认用的是GTK3Agg后端,这个后端在和IPython交互时会导致主线程无法释放,而Ubuntu 14.04用的是更稳定的旧后端(比如GTK2Agg),所以之前没出现这个问题。切换后端或者升级版本都能解决这个阻塞问题。
内容的提问来源于stack exchange,提问作者math123
相关产品推荐
相关产品推荐

