Python 通过ssh使用tkinter没有显示名称和$display环境变量

Python 通过ssh使用tkinter没有显示名称和$display环境变量,python,numpy,ssh,matplotlib,tkinter,Python,Numpy,Ssh,Matplotlib,Tkinter,我试图运行一个非常简单的代码,在集群中输出一个.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) 如果我在安装了matplotlib

我试图运行一个非常简单的代码,在集群中输出一个.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)
如果我在安装了matplotlib 1.2.1的系统中使用命令
python simple_code.py
运行此代码,我会收到警告:

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

您的问题在ssh命令中。你需要做的是这样写:

ssh -X "your_login"

你是通过ssh运行这个吗?是的,我是SethMMorton。我设置了作业,并通过
ssh
让它在集群中运行。当您调用
ssh
时,是否使用
-X
标志?我在本文中添加了
ssh
标记。我认为您应该将标题更改为“通过ssh使用tkinter没有显示名称和$display环境变量”,因为这是真正的问题,并且更容易搜索具有相同问题的其他人(我不喜欢更改其他人的标题)。实际上,这几乎是这个问题的翻版。这会解决你的问题。仅供参考,这不是OP问题的解决方案。我在自己的回答中提出了建议,但当OP告诉我它无法解决问题时,我将其删除。这个问题与这里给出的问题相同,它也包含解决方案:。只是一个提醒,
ssh-X
有时可能会向您发出警告,如
警告:不受信任的X11转发设置失败:未生成xauth密钥数据
,在这种情况下,您应该改为
ssh-Y
。Y为我工作(而-X没有)。谢谢@YuxuanChen
ssh -X "your_login"