Ipython: QXcbConnectionディスプレむに接続できたせんでした

䜜成日 2017幎05月31日  Â·  32コメント  Â·  ゜ヌス: ipython/ipython

完党に新鮮なコンダ環境を䜜成するずき

conda create --name test ipython matplotlib

次に、ipython内からimport matplotlib.pyplotを詊しおみるず、次のようになりたす。

In [1]: import matplotlib.pyplot

In [2]: QXcbConnection: Could not connect to display
Aborted

バニラPythonシェルで同じものを実行しおも問題はありたせん。 py2.7.13ipython 5.3.0ずpy3.6.1ipython 6.0.0の䞡方で発生したす。

これがipythonのバグなのかcondaのバグなのかわからないので、最初にanacondaで問題を提起したしたが、ここでも泚意したいず思いたす。

最も参考になるコメント

ここで利甚可胜な環境倉数を䜿甚した解決策があり

蚭定export QT_QPA_PLATFORM='offscreen'私に.bash_profile私のために働きたした。

党おのコメント32件

os.environ['DISPLAY']がIPythonずバニラPythonシェルで同じであるこずを確認できたすか

matplotlibが別のバック゚ンドを遞択しおいる可胜性があるず思いたすが、なぜそうなるのかはわかりたせん。

そうです-ディスプレむのないクラスタヌヘッドノヌドでこれを実行しおいるこずを忘れたした。 したがっお、$ DISPLAYセットはありたせん os.environ['DISPLAY']は䞡方のシェルでKeyErrorしたす。

たた、バック゚ンドを明瀺的に'agg'に蚭定した堎合も゚ラヌは発生したせんが、ipythonを起動しお、matplotlibをむンポヌトするものをむンポヌトするたびに゚ラヌが発生するのを避けたいず思いたす。

JupyterむンタヌフェヌスのカヌネルずしおIPythonタヌミナルむンタヌフェヌスたたはIPythonを䜿甚しおいたすか カヌネルずしおのIPythonは、デフォルトでむンラむンプロットを生成するようにMPLBACKEND環境倉数を蚭定するず思いたすが、タヌミナルのIPythonでは発生しないはずです。 ずにかく、むンラむンプロットにはXサヌバヌは必芁ないず思いたす。 -/

私はipythonタヌミナルむンタヌフェヌスを䜿甚しおいたした。 DISPLAYが利甚できない堎合、バック゚ンドはデフォルトでそれを必芁ずしないものになっおいるはずですが、それは起こっおいないようです。

@tacaswell IPythonがデフォルトのバック゚ンドに圱響を䞎えおいる理由はありたすか

これは、AnacondaのMatplotlibのデフォルトのバック゚ンドがQt5であるために発生したす。 この皮の問題を回避するために、Tkに倉曎するこずを怜蚎しおいたす。

Tkに倉曎しおも同じ問題が発生したす。

pyplotがIPython内にむンポヌトされるず、むベントルヌプ統合に気づき、セットアップするため、IPythonずPythonですぐに衚瀺されるず思いたす。 プレヌンプロンプトでは、ナヌザヌがプロットを䜜成しようずするず、最終的に問題が発生したす。

デフォルトずしおtkに移行するのは玠晎らしいこずではないず思いたす。

デフォルトずしおtkに移行するのは玠晎らしいこずではないず思いたす。

どういう意味 AnacondaがQt5を䜿甚する方が良いず思いたすか

Qt5はより優れたフレヌムワヌクであり、箱から出しおすぐにhi-dpi画面をサポヌトしたす。Tkに戻るず、ナヌザヌ゚クスペリ゚ンスが䜎䞋するず思いたす。

わかりたした。ヘッドレスDockerコンテナで実行されおいるノヌトブックに぀いお少し心配しおいたす。 しかし、Matplotlib 1.5私は思うでは、ノヌトブックはデフォルトのバック゚ンドずしお自動的にinlineを遞択したすよね

それは完党にjupyter偎にありたす。

MPLBACKEND環境倉数がただ蚭定されおいない堎合、ipykernelはむンラむンバック゚ンドを参照するように蚭定したす。 ゜ヌスコヌドのコメントによるず、これはmpl> = 1.5に圱響し、matplotlibrcよりも優先されたすが、コヌド内のバック゚ンドを明瀺的に遞択するこずよりも優先されたせん。

かっこいい それなら、これは閉じるこずができるず思いたす。

OPは、この゚ラヌを回避するために、matplotlibrcで「agg」をMatplotlibのデフォルトバック゚ンドずしお蚭定するだけです。

これを読み盎すず、元々はカヌネルではなく、タヌミナルIPythonに関するものであるこずがわかりたした。 MPLBACKENDの蚭定に぀いお䞊蚘で述べたこずは、タヌミナルIPythonには適甚されたせん。

報告されおいるのはIPythonのバグではないず思うので、ここでこれを閉じたす。 ヘッドレスバック゚ンドを構成するのはナヌザヌ次第かもしれたせんし、MPLの「IPython内」チェックでもヘッドレス環境にあるかどうかをチェックする必芁があるかもしれたせん。 いずれにせよ、IPythonがそれを修正するためにできるこずは䜕もないず思いたす。

ただし、この問題を議論の堎ずしお匕き続き䜿甚しおください。

はい、それがipythonのバグではないこずは明らかです。 MPLは、誰かがipythonシェルを起動しおmatplotlib.pyplotをむンポヌトできるようにするためのチェックを行い、matplotlibrcオプションを倉曎したり、バック゚ンドを明瀺的に蚭定したりせずに、クラッシュしないようにする必芁があるず思いたす。

@timothydmorton問題は、「ナヌザヌがGUIバック゚ンドの䜿甚を芁求したが、それは䞀皮の意味であり、Aggにフォヌルバックする必芁がある」ず「ナヌザヌがGUIバック゚ンドの䜿甚を芁求しただけで、できない」の違いを瀺しおいたす。 Xサヌバヌが実行されおいないため、文字列入力から「通知する必芁がありたす」。 トレヌドオフは歎史的にむンタラクティブナヌザヌに有利であり、「プロットが衚瀺されない」バグを防ぎ、「ヘッドレスサヌバヌでむンタラクティブバック゚ンドを䜿甚できない」バグが発生するのを防ぎたす。埌者の堎合、ナヌザヌは明確になりたす。䜕が悪いのかに぀いおの゚ラヌ。

最近、バック゚ンドずしお「むンストヌルされおいるQtフレヌバヌ」をサポヌトする方法ず、バック゚ンドフォヌルバックを実行する方法に぀いおいく぀かの議論がありたしたが、GUIフレヌムワヌクは、同時にむンポヌトするずお互いの足を螏む傟向があるため、䞀般的に泚意が必芁です。

私もこの問題の圱響を受けおおり、ipythonの代わりに通垞のpythonを䜿甚する以倖に良い回避策を考えるこずはできたせん。

@russelljjarvisはちょっずした煩わしさですが、ipythonの起動時に最初に実行するコマンドがimport matplotlib; matplotlib.use('agg')堎合、ipythonは機胜するはずです。

はい

import matplotlib; matplotlib.use('agg')

私が実行する最初のコマンドですが、それでも次のようになりたす。

In [1]: QXcbConnection: Could not connect to display :0
Aborted

プログラムが゚ラヌに遭遇した埌、通垞、デバッグずモンキヌパッチのプロンプトが衚瀺されたす。

最初に実行した埌、 ipython -i file_name.py Pythonを呌び出したす ipcluster start -n 8 --profile=default &

file_nameの最初の行はimport matplotlib; matplotlib.use('agg')

ipclusterを実行するず問題が発生するのではないかず思いたす。

ここで利甚可胜な環境倉数を䜿甚した解決策があり

蚭定export QT_QPA_PLATFORM='offscreen'私に.bash_profile私のために働きたした。

同僚が最近同じこずを提案したした。 Dockerのコンテキストでは、ステヌトメントは次のようになりたす。
ENV QT_QPA_PLATFORM offscreen 。 私は今それを効果的にテストしおいたす。

同じ゚ラヌが発生したす

export QT_QPA_PLATFORM='offscreen'蚭定するず、゚ラヌメッセヌゞが次のように倉曎されたした。

(python:17399): Gtk-WARNING **: cannot open display:

ノヌトブックで盎接゜リュヌション

import os
os.environ['QT_QPA_PLATFORM']='offscreen'

埌発のフォロヌアップずしお、Matplotlib 3.0以降、自動バック゚ンド遞択をサポヌトし、ヘッドレスサヌバヌでGUIバック゚ンドを䜿甚しようずはしたせんただし、芁求されたrcparamsファむルは匕き続き尊重されたす。

この回答https://unix.stackexchange.com/questions/192642/wkhtmltopdf-qxcbconnection-could-not-connect-to-display
手動でむンストヌルするず解決したした

「condaupdatematplotlib」で問題が修正されたした。

次の蚭定は機胜したす!!!

゚クスポヌトQT_QPA_PLATFORM = 'オフスクリヌン'

埌発のフォロヌアップずしお、Matplotlib 3.0以降、自動バック゚ンド遞択をサポヌトし、ヘッドレスサヌバヌでGUIバック゚ンドを䜿甚しようずはしたせんただし、芁求されたrcparamsファむルは匕き続き尊重されたす。

Matplotlib 3.1は自動バック゚ンドをサポヌトできないため、手動で「Agg」を蚭定する必芁がありたす。

これは、AnacondaのMatplotlibのデフォルトのバック゚ンドがQt5であるために発生したす。 この皮の問題を回避するために、Tkに倉曎するこずを怜蚎しおいたす。

これはどこで倉曎できたすか

これはexport QT_QPA_PLATFORM=offscreen蚭定した埌の私の゚ラヌです

[tb571<strong i="7">@da02</strong> ~]$ jupyter console --kernel slicer-4.11
qt.qpa.plugin: Could not find the Qt platform plugin "offscreen" in ""
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

QT_QPA_PLATFORM='offscreen'蚭定した埌、matplotlibおよびfastaiラむブラリのむンポヌトが実行されたす。
ただし、plt.figureたたはプロットを出力するその他のコマンドでは、次の゚ラヌが発生したす。

This plugin does not support propagateSizeHints()
This plugin does not support raise()

この゚ラヌも発生したす

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡