2015-07-29 11 views
8

Sto usando pycharm con un interprete remoto.matplotlib su pycharm con l'interprete ssh remoto

Quando provo ad usare matplotlib ricevo il seguente errore:

>>> import matplotlib.pyplot as plt 
Backend TkAgg is interactive backend. Turning interactive mode on. 
Failed to enable GUI event loop integration for 'tk' 
Traceback (most recent call last): 
    File "/home/donbeo/.pycharm_helpers/pydev/pydev_console_utils.py", line 498, in do_enable_gui 
    enable_gui(guiname) 
    File "/home/donbeo/.pycharm_helpers/pydev/pydev_ipython/inputhook.py", line 509, in enable_gui 
    return gui_hook(app) 
    File "/home/donbeo/.pycharm_helpers/pydev/pydev_ipython/inputhook.py", line 262, in enable_tk 
    app = _TK.Tk() 
    File "/usr/lib/python3.4/tkinter/__init__.py", line 1808, in __init__ 
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use) 
_tkinter.TclError: no display name and no $DISPLAY environment variable 
>>> plt.plot([1,2,3]) 
Traceback (most recent call last): 
    File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2821, in run_code 
    exec(code_obj, self.user_global_ns, self.user_ns) 
    File "<ipython-input-6-e426dd61f8f7>", line 1, in <module> 
    plt.plot([1,2,3]) 
    File "/usr/lib/python3/dist-packages/matplotlib/pyplot.py", line 2980, in plot 
    ax = gca() 
    File "/usr/lib/python3/dist-packages/matplotlib/pyplot.py", line 803, in gca 
    ax = gcf().gca(**kwargs) 
    File "/usr/lib/python3/dist-packages/matplotlib/pyplot.py", line 450, in gcf 
    return figure() 
    File "/usr/lib/python3/dist-packages/matplotlib/pyplot.py", line 423, in figure 
    **kwargs) 
    File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_tkagg.py", line 79, in new_figure_manager 
    return new_figure_manager_given_figure(num, figure) 
    File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_tkagg.py", line 87, in new_figure_manager_given_figure 
    window = Tk.Tk() 
    File "/usr/lib/python3.4/tkinter/__init__.py", line 1808, in __init__ 
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use) 
_tkinter.TclError: no display name and no $DISPLAY environment variable 
>>> plt.show() 

Come posso risolvere?

+0

Sono di fronte a problemi simili. Dove sei in grado di risolvere i tuoi problemi? – Maecky

+0

Non ho risolto. Penso che tu possa salvare la trama nel server ssh 'plt.savefig (...)' ma 'plt.show()' restituisce un errore. – Donbeo

+0

Una volta ho lavorato con stucco e xming. Devi abilitare l'inoltro x11 ma non sono stato in grado di configurarlo in pycharm .... – Maecky

risposta

2

Ho avuto lo stesso problema e ha risolto il tutto passando ad un backend non interattivo:

import matplotlib 
matplotlib.use('Agg') 
+0

Hai dovuto utilizzare l'inoltro del display X11? – beldaz

+1

No, è necessario solo l'inoltro del display se si desidera eseguire il rendering dei risultati sulla workstation dalla macchina remota. Se vuoi solo che non si arresti, questo è tutto ciò che devi fare. – lopsided

3

In primo luogo, è necessario inoltrare le connessioni X11 alla macchina locale (ssh -X ... per Linux, per le finestre è possibile utilizzare VcXsrv e imposta l'inoltro nel client ssh).

Avanti, impostare la variabile DISPLAY ambiente nella configurazione funzionare come descritto qui: https://stackoverflow.com/a/32945380/2708478

Dopo di che, plt.show() mostrerà la trama sul computer locale.