_tkinter.TclError: 没有显示名称和 $DISPLAY 环境变量 [英] _tkinter.TclError: no display name and no $DISPLAY environment variable
问题描述
我正在服务器中运行一个简单的 python 脚本:
I am running a simple python script in the server:
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.5.1 的服务器中使用命令 python example.py
它失败并显示错误:
I try to use the command python example.py
in this server which has matplotlib 1.5.1 installed it fails with the error:
Traceback (most recent call last):
File "example.py", line 7, in <module>
plt.scatter(x, y, s=20)
File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/pyplot.py", line 3241, in scatter
ax = gca()
File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/pyplot.py", line 928, in gca
return gcf().gca(**kwargs)
File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/pyplot.py", line 578, in gcf
return figure()
File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/pyplot.py", line 527, in figure
**kwargs)
File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/backends/backend_tkagg.py", line 84, in new_figure_manager
return new_figure_manager_given_figure(num, figure)
File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/backends/backend_tkagg.py", line 92, in new_figure_manager_given_figure
window = Tk.Tk()
File "/usr/local/lib/python2.7/lib-tk/Tkinter.py", line 1810, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
这里发生了什么?
推荐答案
Matplotlib 默认选择 Xwindows 后端.您需要将 matplotlib 设置为不使用 Xwindows 后端.
Matplotlib chooses Xwindows backend by default. You need to set matplotlib to not use the Xwindows backend.
将此代码添加到脚本的开头(在导入 pyplot 之前)并重试:
Add this code to the start of your script (before importing pyplot) and try again:
import matplotlib
matplotlib.use('Agg')
或添加到 .config/matplotlib/matplotlibrc
行 backend: Agg
使用非交互式后端.
Or add to .config/matplotlib/matplotlibrc
line backend: Agg
to use non-interactive backend.
echo "backend: Agg" > ~/.config/matplotlib/matplotlibrc
或者当连接到服务器时使用 ssh -X remoteMachine
命令来使用 Xwindows.
Or when connect to server use ssh -X remoteMachine
command to use Xwindows.
您也可以尝试导出显示:export DISPLAY=mymachine.com:0.0
.
Also you may try to export display: export DISPLAY=mymachine.com:0.0
.
更多信息:https://matplotlib.org/faq/howto_faq.html#matplotlib-in-a-web-application-server
这篇关于_tkinter.TclError: 没有显示名称和 $DISPLAY 环境变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!