2015-11-24 2 views
4

Я пытаюсь запустить скрипт python на моем Linux-сервере и создавать и сохранять некоторые графики. Я установил ipython и pylab и matplotlib но потом, когда я бегу мой сценарий, я получаю эту ошибку:Импорт Matplotlib без дисплея

Traceback (most recent call last): 
    File "/root/dining_hall_graph.py", line 14, in <module> 
    from pylab import * 
    File "/usr/lib64/python2.7/site-packages/pylab.py", line 1, in <module> 
    from matplotlib.pylab import * 
    File "/usr/lib64/python2.7/site-packages/matplotlib/pylab.py", line 265, in <module> 
    from matplotlib.pyplot import * 
    File "/usr/lib64/python2.7/site-packages/matplotlib/pyplot.py", line 97, in <module> 
    _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup() 
    File "/usr/lib64/python2.7/site-packages/matplotlib/backends/__init__.py", line 25, in pylab_setup 
    globals(),locals(),[backend_name]) 
    File "/usr/lib64/python2.7/site-packages/matplotlib/backends/backend_gtkagg.py", line 10, in <module> 
    from matplotlib.backends.backend_gtk import gtk, FigureManagerGTK, FigureCanvasGTK,\ 
    File "/usr/lib64/python2.7/site-packages/matplotlib/backends/backend_gtk.py", line 13, in <module> 
    import gtk; gdk = gtk.gdk 
    File "/usr/lib64/python2.7/site-packages/gtk-2.0/gtk/__init__.py", line 64, in <module> 
    _init() 
    File "/usr/lib64/python2.7/site-packages/gtk-2.0/gtk/__init__.py", line 52, in _init 
    _gtk.init_check() 
RuntimeError: could not open display 

На этой линии from pylab import *

Как построить и сохранить графики в моем питон скрипт, который я бегу на моем Linux-сервере?

Благодаря

+1

Вопрос заключается в использовании бэкэнда gtk. Этот ответ решает вашу проблему? http://stackoverflow.com/a/4935945/230468 – DilithiumMatrix

ответ

12

Вы почти никогда не используют from pylab import *.

Импортируйте то, что вам нужно от numpy, scipy и matplotlib.

На машинах без дисплея, вам нужно использовать agg бэкенд:

Вы можете достичь этого, указав переменную окружения MPLBACKEND

$ MPLBACKEND=Agg python plot.py 

Или импортировать matplotlibперед импорта matplotlib.pyplot:

import matplotlib 
matplotlib.use('Agg') 

import matplotlib.pyplot as plt 

plt.plot([1, 2, 1]) 
plt.savefig('test.pdf') 

Для того, чтобы сделать это по умолчанию, вы можете создать файл с именем matplotlibrc в текущем каталоге или в $HOME/.config/matplotlib со следующим содержанием:

backend: Agg 

Ot вы могли позволить X-Forwarding, поэтому участки выскочат на вашем хосте машины:

ssh -X [email protected] 
+0

отлично, можно ли увидеть участок в терминале? – spenf10

+0

Что вы имеете в виду? Ascii-арт? – MaxNoe

+0

есть Ascii-art, можно ли это сделать? – spenf10

Смежные вопросы