在 Travis 中测试基于 matplotlib 的绘图 CI
Testing matplotlib-based plots in Travis CI
我有一个包,其中有一个模块可以帮助用户使用 matplotlib 生成特定的绘图。当我在 Travis 的单元测试中调用这些函数时,出现以下错误:
RuntimeError: Invalid DISPLAY variable
我该如何解决?
生成绘图后,我的函数通常会调用 pyplot.show()
,这会打开一个需要关闭的 window。当我在 Travis 的单元测试中调用这些函数时,它们会永远挂断。
如何测试这些绘图是使用 Travis CI 生成的?
更新: 根据@matt-pitkin 评论,该方法已更新。如果使用 Ubuntu Xenial 容器,启用 xvfb 的首选方法是通过 Travis 服务:
services:
- xvfb
但是,如果使用 Ubuntu Trusty 容器,我的原始答案(如下)仍然相关。我还建议阅读@david-ketcheson 的回答,它对原始问题有更具体的解决方案。
为了在 Travis 中设置 DISPLAY 变量,您需要从他们的 VM 中模拟显示。 They teach how to do it 使用 xvfb
通过将以下内容添加到 .travis.yml
文件的 before_script
中:
before_script: # configure a headless display to test plot generation
- "export DISPLAY=:99.0"
- "sh -e /etc/init.d/xvfb start"
- sleep 3 # give xvfb some time to start
为了让 Travis 不被情节挂断,干脆不要打电话给 pyplot.show()
。如果您要测试太多图,请务必调用 pyplot.close()
否则它会抱怨打开的图像太多。
您可以通过使用 matplotlib 中的 "agg" 后端来解决此问题而无需显式设置显示。无论如何,根据我的经验,这是必要的,以确保生成图像的一致性。只要确保你
matplotlib.use('agg')
在导入 pyplot 或 pylab 之前。我已经解释了更多 here。
我有一个包,其中有一个模块可以帮助用户使用 matplotlib 生成特定的绘图。当我在 Travis 的单元测试中调用这些函数时,出现以下错误:
RuntimeError: Invalid DISPLAY variable
我该如何解决?
生成绘图后,我的函数通常会调用 pyplot.show()
,这会打开一个需要关闭的 window。当我在 Travis 的单元测试中调用这些函数时,它们会永远挂断。
如何测试这些绘图是使用 Travis CI 生成的?
更新: 根据@matt-pitkin 评论,该方法已更新。如果使用 Ubuntu Xenial 容器,启用 xvfb 的首选方法是通过 Travis 服务:
services:
- xvfb
但是,如果使用 Ubuntu Trusty 容器,我的原始答案(如下)仍然相关。我还建议阅读@david-ketcheson 的回答,它对原始问题有更具体的解决方案。
为了在 Travis 中设置 DISPLAY 变量,您需要从他们的 VM 中模拟显示。 They teach how to do it 使用 xvfb
通过将以下内容添加到 .travis.yml
文件的 before_script
中:
before_script: # configure a headless display to test plot generation
- "export DISPLAY=:99.0"
- "sh -e /etc/init.d/xvfb start"
- sleep 3 # give xvfb some time to start
为了让 Travis 不被情节挂断,干脆不要打电话给 pyplot.show()
。如果您要测试太多图,请务必调用 pyplot.close()
否则它会抱怨打开的图像太多。
您可以通过使用 matplotlib 中的 "agg" 后端来解决此问题而无需显式设置显示。无论如何,根据我的经验,这是必要的,以确保生成图像的一致性。只要确保你
matplotlib.use('agg')
在导入 pyplot 或 pylab 之前。我已经解释了更多 here。