我正在修改一个使用matplotlib绘制一些特殊图形的python模块。
现在,此模块只将所有数字保存为文件。
我希望能够在ipython笔记本中工作时导入模块并查看结果“内联”,另一方面我希望保留默认功能,即在导入模块时将数字保存为文件在所有其他情况下。
所以我需要以某种方式检查模块是否在ipython笔记本中导入并且pylab是否内联运行。
我该怎么检查?
答案 0 :(得分:14)
您可以使用以下命令检查matplotlib后端:
import matplotlib
matplotlib.get_backend()
特别要检查内联matplotlib:
mpl_is_inline = 'inline' in matplotlib.get_backend()
请注意,使用IPython笔记本,无论活动的matplotlib后端如何,您都可以始终显示内嵌数字:
display(fig)
答案 1 :(得分:9)
尝试怎么样:
try:
cfg = get_ipython().config
print('Called by IPython.')
# Caution: cfg is an IPython.config.loader.Config
if cfg['IPKernelApp']:
print('Within IPython QtConsole.')
try:
if cfg['IPKernelApp']['pylab'] == 'inline':
print('inline pylab loaded.')
else:
print('pylab loaded, but not in inline mode.')
except:
print('pylab not loaded.')
elif cfg['TerminalIPythonApp']:
try:
if cfg['TerminalIPythonApp']['pylab'] == 'inline':
print('inline pylab loaded.')
else:
print('pylab loaded, but not in inline mode.')
except:
print('pylab not loaded.')
except:
print('Not called by IPython.')
答案 2 :(得分:2)
这让我搜索,我想我找到了解决方案。不确定这是实际记录的还是有意的,但它可能很有效:
get_ipython().config['IPKernelApp']['pylab'] == 'inline'
get_ipython()
似乎是仅在运行IPython时定义的方法;它返回我假设的当前IPython会话。然后,您可以访问包含“IPKernelApp”元素的config
属性,这是一个字典。后者本身就是一个字典,可以包含一个键pylab
,它可以是字符串'inline'
。
我没有尝试过广泛,但我猜测如果你没有运行pylab内联,上面的代码行将评估为False。
更重要的是,当你没有运行笔记本或pylab选项时,它会引发KeyError,因此你需要捕获它并将该引发的异常作为“no”运行带有pylab内联的笔记本。< / p>
最后,get_ipython()
可能会抛出一个NameError
,与上面类似,当然也意味着你没有运行IPython。
我只是对它进行了最低限度的测试,但是在我的IPython笔记本中导入了这个,然后在默认的Python cmdline上显示它可以工作。
请告诉我们这是否适合您。