Python在终端与IPython笔记本中保存PNG

Python在终端与IPython笔记本中保存PNG,python,python-3.x,matplotlib,Python,Python 3.x,Matplotlib,我正在编写一个基本的Python模块,其中包含一个函数,用于从数据帧绘制一些数据。问题是,我希望用户从交互式shell和IPython笔记本中调用此函数。不幸的是,我们的交互式shell环境没有任何有效的显示选项可供matplotlib使用,因此我希望我的函数(或完整模块)的行为根据加载到的环境略有不同。(例如,默认设置为在IPython中显示绘图而不保存,在shell中保存绘图而不显示) 给了我一个部分答案,因为我可以明确地告诉用户在导入我的模块之前编写matplotlib.use('Agg'

我正在编写一个基本的Python模块,其中包含一个函数,用于从数据帧绘制一些数据。问题是,我希望用户从交互式shell和IPython笔记本中调用此函数。不幸的是,我们的交互式shell环境没有任何有效的显示选项可供matplotlib使用,因此我希望我的函数(或完整模块)的行为根据加载到的环境略有不同。(例如,默认设置为在IPython中显示绘图而不保存,在shell中保存绘图而不显示)


给了我一个部分答案,因为我可以明确地告诉用户在导入我的模块之前编写
matplotlib.use('Agg')
,但肯定有一种更自动化的后端方法来处理这个问题?

您可以尝试检查是否遇到这种情况(空
$DISPLAY
)默认用户使用
Agg
后端,而不是要求他们这样做

def configure_matplotlib():
   import os
   if 'DISPLAY' not in os.environ:
      if matplotlib.get_backend() != 'Agg':
          matplotlib.use('Agg')


import matplotlib
configure_matplotlib()
import matplotlib.pyplot as plt
...
现在,导入
pyplot
后,
matplotlib.use
将不起作用,但如果您的用户已经这样做了,他们可能仍然有一个工作配置