DISPLAY未定义时使用Matplotlib
在远程机器上(例如在Travis CI上)使用Matplotlib时,我遇到了与DISPLAY环境variables没有设置有关的频繁的运行时错误。 按照build议,我已经在我的testing脚本开始时通过matplotlib.use
设置了Agg
后端,并确保没有调用show()
。 不过,我仍然得到以下错误:
Traceback (most recent call last): File "/home/travis/anaconda/envs/testenv/lib/python2.7/site-packages/nose/case.py", line 197, in runTest self.test(*self.arg) File "/home/travis/build/pymc-devs/pymc/pymc/tests/test_plots.py", line 36, in test_multichain_plots forestplot(ptrace, vars=['early_mean', 'late_mean']) File "/home/travis/build/pymc-devs/pymc/pymc/plots.py", line 325, in forestplot interval_plot = subplot(gs[0]) File "/home/travis/anaconda/envs/testenv/lib/python2.7/site-packages/matplotlib/pyplot.py", line 896, in subplot fig = gcf() File "/home/travis/anaconda/envs/testenv/lib/python2.7/site-packages/matplotlib/pyplot.py", line 450, in gcf return figure() File "/home/travis/anaconda/envs/testenv/lib/python2.7/site-packages/matplotlib/pyplot.py", line 423, in figure **kwargs) File "/home/travis/anaconda/envs/testenv/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.py", line 31, in new_figure_manager return new_figure_manager_given_figure(num, thisFig) File "/home/travis/anaconda/envs/testenv/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.py", line 38, in new_figure_manager_given_figure canvas = FigureCanvasQTAgg(figure) File "/home/travis/anaconda/envs/testenv/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.py", line 70, in __init__ FigureCanvasQT.__init__( self, figure ) File "/home/travis/anaconda/envs/testenv/lib/python2.7/site-packages/matplotlib/backends/backend_qt4.py", line 207, in __init__ _create_qApp() File "/home/travis/anaconda/envs/testenv/lib/python2.7/site-packages/matplotlib/backends/backend_qt4.py", line 62, in _create_qApp raise RuntimeError('Invalid DISPLAY variable') RuntimeError: Invalid DISPLAY variable
还有其他build议来避免这种情况吗?
使用xvfb
工程,请参阅Travis的GUI和无头浏览器testing文档。
ps matplotlib.use('Agg')
技巧适用于我。