์์ ํ ์๋ก์ด ์ฝ๋ค ํ๊ฒฝ์ ๋ง๋ค ๋:
conda create --name test ipython matplotlib
๊ทธ๋ฐ ๋ค์ ipython ๋ด์์ import matplotlib.pyplot
๋ฅผ ์๋ํ๋ฉด ๋ค์์ ์ป์ต๋๋ค.
In [1]: import matplotlib.pyplot
In [2]: QXcbConnection: Could not connect to display
Aborted
๋ฐ๋๋ผ ํ์ด์ฌ ์ ธ์์ ๋์ผํ๊ฒ ์คํํด๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. py2.7.13(ipython 5.3.0) ๋ฐ py3.6.1(ipython 6.0.0) ๋ชจ๋์์ ๋ฐ์ํฉ๋๋ค.
๋ด๊ฐ ๋จผ์ ๋ฌธ์ ๋ฅผ ์ ๊ธฐ ๊ทธ๋์ ๋๋์ด๊ฐ ipython ๋ฒ๊ทธ ๋๋ CONDA ๋ฒ๊ทธ์ธ์ง ๋ชจ๋ฅด๋ ์๋์ฝ๋ค ,ํ์ง๋ง ๋๋ฌด ์ฌ๊ธฐ์์ฃผ์ํ๊ณ ์ถ์๋ค.
os.environ['DISPLAY']
๊ฐ ๋ฐ๋๋ผ Python ์
ธ์์์ ๊ฐ์ด IPython์์๋ ๋์ผํ์ง ํ์ธํ ์ ์์ต๋๊น?
matplotlib๊ฐ ๋ค๋ฅธ ๋ฐฑ์๋๋ฅผ ์ ํํ๋ ๊ฒ์ผ ์ ์์ง๋ง ์ ๊ทธ๋ ๊ฒ ํ๋์ง๋ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋ง์-- ๋์คํ๋ ์ด๊ฐ ์๋ ํด๋ฌ์คํฐ ํค๋ ๋
ธ๋์์ ์ด๊ฒ์ ์คํํ๊ณ ์๋ค๋ ๊ฒ์ ์ธ๊ธํ๋ ๊ฒ์ ์์์ต๋๋ค. ๋ฐ๋ผ์ $DISPLAY ์ธํธ๊ฐ ์์ต๋๋ค( os.environ['DISPLAY']
๋ ๋ ์ ๋ชจ๋์์ KeyError
๋ฅผ ์ ๊ณตํฉ๋๋ค).
๊ทธ๋ฆฌ๊ณ ๋ฐฑ์๋๋ฅผ ๋ช
์์ ์ผ๋ก 'agg'
ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ง๋ง ipython์ ์์ํ ๋๋ง๋ค ๊ทธ๋ ๊ฒ ํ์ง ์๊ณ matplotlib๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๊ฐ์ ธ์ค๊ณ ์ถ์ต๋๋ค.
Jupyter ์ธํฐํ์ด์ค์์ IPython ํฐ๋ฏธ๋ ์ธํฐํ์ด์ค ๋๋ IPython์ ์ปค๋๋ก ์ฌ์ฉํ๊ณ ์์ต๋๊น? ์ปค๋๋ก์์ IPython์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ๋ผ์ธ ํ๋กฏ์ ์์ฑํ๋๋ก MPLBACKEND
ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ๋ค๊ณ ์๊ฐํ์ง๋ง ํฐ๋ฏธ๋์ IPython์์๋ ๋ฐ์ํ์ง ์์์ผ ํฉ๋๋ค. ์ด์จ๋ ์ธ๋ผ์ธ ํ๋กฏ์๋ X ์๋ฒ๊ฐ ํ์ํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. :-/
๋๋ ๋จ์ง ipython ํฐ๋ฏธ๋ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๊ณ ์์์ต๋๋ค. DISPLAY
๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ ๋ฐฑ์๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ํ์ง ์์ ๊ฒ์ผ๋ก ์ค์ ๋์ด์ผ ํ์ง๋ง ์ค์ ๋ก๋ ์ผ์ด๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
@tacaswell IPython์ด ์ฌ๊ธฐ์์ ๊ธฐ๋ณธ ๋ฐฑ์๋์ ์ํฅ์ ๋ฏธ์น๋ ์ด์ ๋ฅผ ์ ์ ์์ต๋๊น?
์ด๊ฒ์ Anaconda์ Matplotlib์ ๋ํ ๊ธฐ๋ณธ ๋ฐฑ์๋๊ฐ Qt5์ด๊ธฐ ๋๋ฌธ์ ๋ฐ์ํฉ๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํด T๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ ๊ณ ๋ คํ๊ณ ์์ต๋๋ค.
Tk๋ก ๋ณ๊ฒฝํด๋ ์ฌ์ ํ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
pyplot์ IPython ๋ด๋ถ๋ก ๊ฐ์ ธ์ค๋ฉด ์ด๋ฒคํธ ๋ฃจํ ํตํฉ์ ๊ฐ์งํ๊ณ ์ค์ ํ๊ธฐ ๋๋ฌธ์ IPython ๋ python์์ ์ฆ์ ํ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ผ๋ฐ ํ๋กฌํํธ์์ ์ฌ์ฉ์๊ฐ ํ๋กฏ์ ๋ง๋ค๋ ค๊ณ ํ ๋ ๊ฒฐ๊ตญ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
๊ธฐ๋ณธ๊ฐ์ผ๋ก t๋ก ์ด๋ํ๋ ๊ฒ์ด ์ข์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๊ธฐ๋ณธ๊ฐ์ผ๋ก t๋ก ์ด๋ํ๋ ๊ฒ์ด ์ข์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ ํํ๊ฒ ๋ฌด์จ ๋ป์ ๋๊น? Anaconda๊ฐ Qt5๋ฅผ ์ ์งํ๋ ๊ฒ์ด ๋ ๋ซ๋ค๊ณ ์๊ฐํ์ญ๋๊น?
Qt5๋ ๋ ๋์ ํ๋ ์์ํฌ์ด๋ฉฐ ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ hi-dpi ํ๋ฉด์ ์ง์ํฉ๋๋ค. Tk๋ก ๋์๊ฐ๋ ๊ฒ์ ์ฌ์ฉ์ ๊ฒฝํ์์ ํด๋ณดํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ข์, ์ฐ๋ฆฌ๋ ํค๋๋ฆฌ์ค Docker ์ปจํ
์ด๋์์ ์คํ๋๋ ๋
ธํธ๋ถ์ ๋ํด ์ฝ๊ฐ ๊ฑฑ์ ํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ Matplotlib 1.5(๋ด ์๊ฐ์๋)๋ฅผ ์ฌ์ฉํ๋ฉด ๋
ธํธ๋ถ์ด ์๋์ผ๋ก inline
๋ฅผ ๊ธฐ๋ณธ ๋ฐฑ์๋๋ก ์ ํํฉ๋๋ค. ๊ทธ๋ ์ฃ ?
๊ทธ๊ฒ์ ์ ์ ์ผ๋ก jupyter ์ธก์ ์์ต๋๋ค.
MPLBACKEND
ํ๊ฒฝ ๋ณ์๊ฐ ์์ง ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ ipykernel์ ์ธ๋ผ์ธ ๋ฐฑ์๋๋ฅผ ์ฐธ์กฐํ๋๋ก ์ค์ ํฉ๋๋ค. ์์ค ์ฝ๋์ ์ฃผ์์ ์ด๊ฒ์ด mpl >= 1.5์ ์ํฅ์ ๋ฏธ์น๊ณ matplotlibrc๋ณด๋ค ์ฐ์ ์์๊ฐ ๋์ง๋ง ์ฝ๋์์ ๋ช
์์ ์ผ๋ก ๋ฐฑ์๋๋ฅผ ์ ํํ๋ ๊ฒ๋ณด๋ค ์ฐ์ ํ์ง ์๋๋ค๊ณ ๋งํฉ๋๋ค.
์ ๋ง ๋ฉ์ง๋ค์! ๊ทธ๋ฌ๋ฉด ๋ซ์ ์ ์๋ค๊ณ ํฉ๋๋ค.
OP๋ ์ด ์ค๋ฅ๋ฅผ ํผํ๊ธฐ ์ํด matplotlibrc์์ Matplotlib์ ๊ธฐ๋ณธ ๋ฐฑ์๋๋ก 'agg'๋ฅผ ๊ฐ๋จํ ์ค์ ํ ์ ์์ต๋๋ค.
์ด๊ฒ์ ๋ค์ ์ฝ์ผ๋ฉด ์ปค๋์ด ์๋ ํฐ๋ฏธ๋ IPython์ ๊ดํ ๊ฒ์ด์์ต๋๋ค. ์์์ MPLBACKEND ์ค์ ์ ๋ํด ๋งํ ๊ฒ์ ํฐ๋ฏธ๋ IPython์๋ ์ ์ฉ๋์ง ์์ต๋๋ค.
๋๋ ๋ณด๊ณ ๋ ๊ฒ์ด IPython์ ๋ฒ๊ทธ๋ผ๊ณ ์๊ฐํ์ง ์๊ธฐ ๋๋ฌธ์ ์ง๊ธ ์ด๊ฒ์ ๋ซ์ ๊ฒ์ ๋๋ค. ํค๋๋ฆฌ์ค ๋ฐฑ์๋๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ ์ฌ์ฉ์์๊ฒ ๋ฌ๋ ค ์๊ฑฐ๋ MPL์ "IPython ๋ด๋ถ" ๊ฒ์ฌ๊ฐ ํค๋๋ฆฌ์ค ํ๊ฒฝ์ ์๋์ง ์ฌ๋ถ๋ ํ์ธํด์ผ ํฉ๋๋ค. ์ด๋ ์ชฝ์ด๋ , ๋๋ ๊ทธ๊ฒ์ ๊ณ ์น ์ ์๋ IPython์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๋๋ ์ด ๋ฌธ์ ๋ฅผ ํ ๋ก ์ ์ฅ์ผ๋ก ๊ณ์ ์ฌ์ฉํ์ญ์์ค.
์, ipython ๋ฒ๊ทธ๊ฐ ์๋ ๊ฒ์ด ๋ถ๋ช ํด ๋ณด์ ๋๋ค. ๋๋ MPL์ด ๋๊ตฐ๊ฐ๊ฐ ipython ์ ธ์ ์์ํ๊ณ matplotlib.pyplot์ ๊ฐ์ ธ์ฌ ์ ์๋๋ก ํ์ธํด์ผ ํ๋ฉฐ, matplotlibrc ์ต์ ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ๋ฐฑ์๋๋ฅผ ๋ช ์์ ์ผ๋ก ์ค์ ํ์ง ์๊ณ ๋ ์ถฉ๋ํ์ง ์๋๋ก ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@timothydmorton ๋ฌธ์ ๋ "์ฌ์ฉ์๊ฐ ๋ฐฉ๊ธ GUI ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ๋๋ก ์์ฒญํ์ง๋ง ์ผ์ข ์ ์๋ฏธ
์ต๊ทผ์ "์ด๋ค Qt ๋ฒ์ ์ด ์ค์น๋์ง"๋ฅผ ๋ฐฑ์๋๋ก ์ง์ํ๋ ๋ฐฉ๋ฒ๊ณผ ๋ฐฑ์๋ ํด๋ฐฑ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ ผ์๊ฐ ์์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก GUI ํ๋ ์์ํฌ๋ฅผ ๋์์ ๊ฐ์ ธ์ค๋ฉด 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๋ฅผ ์คํํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง ๊ถ๊ธํฉ๋๋ค.
์ฌ๊ธฐ์ ์ฌ์ฉ ๊ฐ๋ฅํ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ์๋ฃจ์ ์ด ์์ต๋๋ค .
๋ด .bash_profile
export QT_QPA_PLATFORM='offscreen'
๋ฅผ ์ค์ ํ๋ฉด ํจ๊ณผ์ ์ด์์ต๋๋ค.
๋๋ฃ๊ฐ ์ต๊ทผ์ ๊ฐ์ ์ ์์ ํ์ต๋๋ค. 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
์๋์ผ๋ก ์ค์นํ ํ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค.
"conda update matplotlib"๊ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
๋ด๋ณด๋ด๊ธฐ QT_QPA_PLATFORM='์คํ์คํฌ๋ฆฐ'
๋ฆ์ ํ์ ์กฐ์น๋ก Matplotlib 3.0์์ ์ด์ ์๋ ๋ฐฑ์๋ ์ ํ์ ์ง์ํ๊ณ ํค๋๋ฆฌ์ค ์๋ฒ์์ GUI ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค(๊ทธ๋ฌ๋ ์ฌ์ ํ ์์ฒญํ๋ rcparams ํ์ผ์ ์กด์คํฉ๋๋ค)
Matplotlib 3.1์ ์๋ ๋ฐฑ์๋๋ฅผ ์ง์ํ ์ ์์ผ๋ฏ๋ก 'Agg'๋ฅผ ์๋์ผ๋ก ์ค์ ํด์ผ ํฉ๋๋ค.
์ด๊ฒ์ Anaconda์ Matplotlib์ ๋ํ ๊ธฐ๋ณธ ๋ฐฑ์๋๊ฐ Qt5์ด๊ธฐ ๋๋ฌธ์ ๋ฐ์ํฉ๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํด T๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ ๊ณ ๋ คํ๊ณ ์์ต๋๋ค.
์ด๊ฑฐ ์ด๋์ ๋ฐ๊ฟ ์ ์๋์?
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()
๋๋์ด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ฌ๊ธฐ์ ์ฌ์ฉ ๊ฐ๋ฅํ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ์๋ฃจ์ ์ด ์์ต๋๋ค .
๋ด
.bash_profile
export QT_QPA_PLATFORM='offscreen'
๋ฅผ ์ค์ ํ๋ฉด ํจ๊ณผ์ ์ด์์ต๋๋ค.