Нет отображаемого имени и переменной $DISPLAY среды с помощью tkinter через ssh

Я пытаюсь запустить очень простой код, который выводит файл .png в кластере. Здесь код:

import matplotlib.pyplot as plt
import numpy as np

x = np.random.randn(60)
y = np.random.randn(60)

plt.scatter(x, y, s=20)

out_png = 'path/to/store/out_file.png'
plt.savefig(out_png, dpi=150)

Если я запустил этот код с помощью команды python simple_code.py в моей системе, где установлен matplotlib 1.2.1, я получаю предупреждение:

Unable to load library icui18n "Cannot load library icui18n:

Изображение .png все еще создано, поэтому у меня нет проблем. Но если я использую одну и ту же команду и код в кластере, у которого установлен matplotlib 1.3.0, он не работает с ошибкой:

Traceback (most recent call last):
  File "simple_code.py", line 33, in <module>
    plt.scatter(x, y, s=20)
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 3078, in scatter
    ax = gca()
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 803, in gca
    ax =  gcf().gca(**kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 450, in gcf
    return figure()
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 423, in figure
    **kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_tkagg.py", line 79, in new_figure_manager
    return new_figure_manager_given_figure(num, figure)
  File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_tkagg.py", line 87, in new_figure_manager_given_figure
    window = Tk.Tk()
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1712, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable

Что здесь происходит?


Добавить, это script, который я использую для входа в кластер:

#!/usr/bin/expect

set login "user"
set addr "address1"
set addr2 "address2"
set pw "password"

spawn ssh -X [email protected]$addr
expect "[email protected]$addr\ password:"
send "$pw\r"
expect "[email protected]:"
send "ssh -X $addr2\r"
expect "[email protected]$addr\ password:"
send "$pw\r"
interact

Ответ 1

Ваша проблема в команде ssh. Вам нужно написать так:

ssh -X "your_login"