Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

matplotlib on pycharm with remote ssh intepreter

I am using pycharm with a remote interpreter.

When I try to use matplotlib I get the following error:

>>> 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()

How can I solve?

like image 304
Donbeo Avatar asked Jul 29 '15 14:07

Donbeo


People also ask

How do I connect to a remote server with PyCharm?

Connect to a remote server and open the remote project Ensure you have the Remote Development Gateway plugin enabled. On the PyCharm welcome screen, select Remote Development. In the Run the IDE Remotely section, click SSH Connection.

Can you SSH with PyCharm?

You can launch an SSH Session right from PyCharm. By running commands in a dedicated SSH terminal, you can access data on a remote Web server or the default remote interpreter via an SSH tunnel, mainly upload and download files.

How do I select an interpreter in PyCharm?

Change the Python interpreter in the project settingsPress Ctrl+Alt+S to open the IDE settings and select Project <project name> | Python Interpreter. Expand the list of the available interpreters and click the Show All link. Select the target interpreter.

What is a remote Python interpreter?

This feature requires xlwings PRO and at least v0. 27.0. Instead of installing Python on each end-user's machine, you can work with a remote Python interpreter. This works the same as a web application, but uses your spreadsheet as the frontend instead of a web page in a browser.


2 Answers

First, you need to forward X11 connections to your local machine (ssh -X ... for linux, for windows you can use VcXsrv and setup the forwarding in your ssh client).

Next, set the DISPLAY environment variable in your run configuration as described here: https://stackoverflow.com/a/32945380/2708478

After that, plt.show() will show the plot on your local machine.

like image 135
Alexey Romanov Avatar answered Sep 18 '22 22:09

Alexey Romanov


I had the same problem and fixed it by changing to a non-interactive backend:

import matplotlib
matplotlib.use('Agg')
like image 23
lopsided Avatar answered Sep 21 '22 22:09

lopsided