通过vscode的SSH隧道打开一个Matplotlib图

ju9*_*5ju 7 python ssh tkinter matplotlib visual-studio-code

我正在设置一个远程工作站,以便在另一台包含 GPU 的计算机上从我的笔记本电脑运行与机器学习相关的 Python 代码。

我使用 vscode 的 SSH 远程功能来远程运行和调试我的代码,我对界面非常满意。但是,我无法生成来自“matplotlib”库的数字。

我试图修改一些 matlplotlib 选项,但没有成功:

import matplotlib
matplotlib.use('Agg')
Run Code Online (Sandbox Code Playgroud)

按照说明:_tkinter.TclError: no display name and no $DISPLAY environment variable

简而言之,我的问题出现在以下示例代码中:

import numpy as np
from matplotlib import pyplot as plt 

x = np.linspace(0,1,101)
y = x ** 2

plt.close()
plt.figure()
plt.plot(x,y)
plt.show()
Run Code Online (Sandbox Code Playgroud)
~/vscode$ cd /home/*/vscode ; env PYTHONIOENCODING=UTF-8 PYTHONUNBUFFERED=1 /usr/bin/python3 /home/*/.vscode-server/extensions/ms-python.python-2019.6.24221/pythonFiles/ptvsd_launcher.py --default --client --host localhost --port 39903 /home/*/vscode/test_plot.py 
Traceback (most recent call last):
  File "/home/*/.vscode-server/extensions/ms-python.python-2019.6.24221/pythonFiles/ptvsd_launcher.py", line 43, in <module>
    main(ptvsdArgs)
  File "/home/*/.vscode-server/extensions/ms-python.python-2019.6.24221/pythonFiles/lib/python/ptvsd/__main__.py", line 434, in main
    run()
  File "/home/*/.vscode-server/extensions/ms-python.python-2019.6.24221/pythonFiles/lib/python/ptvsd/__main__.py", line 312, in run_file
    runpy.run_path(target, run_name='__main__')
  File "/usr/lib/python3.6/runpy.py", line 263, in run_path
    pkg_name=pkg_name, script_name=fname)
  File "/usr/lib/python3.6/runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/*/vscode/test_plot.py", line 8, in <module>
    plt.figure()
  File "/usr/lib/python3/dist-packages/matplotlib/pyplot.py", line 539, in figure
    **kwargs)
  File "/usr/lib/python3/dist-packages/matplotlib/backend_bases.py", line 171, in new_figure_manager
    return cls.new_figure_manager_given_figure(num, fig)
  File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_tkagg.py", line 1049, in new_figure_manager_given_figure
    window = Tk.Tk(className="matplotlib")
  File "/usr/lib/python3.6/tkinter/__init__.py", line 2023, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
Run Code Online (Sandbox Code Playgroud)

非常感谢你帮助我!

ju9*_*5ju 6

我设法通过export DISPLAY=localhost:10.0在启用 X11 转发的情况下运行并行 Putty ssh 连接并在启动 python 脚本之前在 vscode 的终端中写入来解决这个问题。

但是,我有安全问题,我想知道为什么我必须手动执行这些命令才能使其工作......任何见解将不胜感激!


小智 5

我发现以前的答案略有变化,效果很好。

将绘图另存为.png而不是绘制它。

plt.savefig("dummy_name.png")

然后,上一个答案建议将文件移动到scp. 我建议dummy_name.png使用 Visual Code打开,无需编写命令,只要您绘制其他内容,它就会自动刷新图像。我在美国用 SSH 测试到欧洲的服务器,图像在不到半秒内刷新。

  • 这是一条有用的评论,但不是问题的答案 (4认同)

归档时间:

查看次数:

8607 次

最近记录:

4 年 前