2016-02-15 19 views
10

matplotlibを使用して特定のプロットを生成するのに役立つモジュールがあるパッケージがあります。私はそれを修正するにはどうすればよいTravis CIのmatplotlibベースプロットのテスト

RuntimeError: Invalid DISPLAY variable 

:私はトラヴィス内部の私のユニットテストでは、これらの関数を呼び出すと、私は次のエラーを取得しますか?

プロットを生成した後、私の関数は通常pyplot.show()を呼び出し、閉じなければならないウィンドウを開きます。 Travisのユニットテストでこれらの関数を呼び出すと、永遠にハングしてしまいます。

Travis CIを使用してこれらのプロットが生成されていることをどのようにテストしますか?

答えて

10

Travis内でDISPLAY変数を設定するには、VM内からディスプレイをエミュレートする必要があります。 They teach how to do it YOUT .travis.ymlファイルのbefore_scriptに以下を追加してxvfbを使用:プロットの上にハングアップを取得しないトラヴィスは、単にpyplot.show()を呼び出さないためには

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 

。あまりにも多くのプロットをテストしている場合は、pyplot.close()に必ず電話してください。そうしないと、開いている画像が多すぎると不平を言うでしょう。

+0

これは機能します!もしもあなたが[tox](https://pypi.python.org/pypi/tox)を使っているのであれば、passenvに 'DISPLAY'を追加することを忘れないでください – shapiromatron

0

matplotlibの "agg"バックエンドを使用して明示的に表示を設定せずにこれを解決できます。とにかく、私の経験では、生成された画像の一貫性を保証するために、これは必要です。 pyplotまたはpylabをインポートする前に、必ず

matplotlib.use('agg') 

を入力してください。私はさらにhereを説明しました。