最近我们开始看到这个错误出现:
matplotlib.use() must be called *before* pylab, matplotlib.pyplot,
or matplotlib.backends is imported for the first time.
warnings.warn(_use_error_msg)
/var/build/user_builds/astropy/checkouts/latest/docs/analytic_functions/index.rst:83: WARNING: Exception occurred in plotting index-1
from /var/build/user_builds/astropy/checkouts/latest/docs/analytic_functions/index.rst:
Traceback (most recent call last):
File "/usr/lib/pymodules/python2.7/matplotlib/sphinxext/plot_directive.py", line 515, in run_code
exec code in ns
File "<string>", line 14, in <module>
File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 1046, in subplots
fig = figure(**fig_kw)
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 1767, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
TclError: no display name and no $DISPLAY environment variable
使用 matplotlib plot_directive 时。 RTD 配置似乎发生了一些变化,后端默认为交互式。
(这是有人首先报告此问题的 Astropy 问题:https://github.com/astropy/astropy/issues/3600)
@ericholscher - 知道是什么原因造成的吗? 由于这个问题,我们所有的图目前都被破坏了,这似乎超出了我们的控制并且与 RTD 相关。 其他项目没有这个问题吗?
我们没有改变我所知道的任何事情。 您是否尝试过这种解决方法?
http://stackoverflow.com/a/3054314
2015 年 3 月 24 日,星期二,凌晨 1:48,Thomas Robitaille < [email protected]
写道:
@ericholscher https://github.com/ericholscher - 知道可能是什么
造成这个? 由于这个问题,我们所有的地块目前都被破坏了,这
似乎超出了我们的控制范围并且与 RTD 相关。 其他项目没有
这个问题?—
直接回复此邮件或在 GitHub 上查看
https://github.com/rtfd/readthedocs.org/issues/1195#issuecomment -85406365
.
埃里克·霍尔舍
居住在波特兰的互联网制造商,或者
http://ericholscher.com
@ericholscher - 是的,我们已经调用了它,但我们看到:
/usr/lib/pymodules/python2.7/matplotlib/__init__.py:1173: UserWarning: This call to matplotlib.use() has no effect
because the backend has already been chosen;
matplotlib.use() must be called *before* pylab, matplotlib.pyplot,
or matplotlib.backends is imported for the first time.
这表明已经预先设置了后端。
有什么建议? 我对 matplotlib 了解不多,我们还没有做过
我知道的任何事情都应该影响它。 我很高兴升级它,似乎
我们使用的是 1.3.1,但我真的不知道如何调试问题,因为我
完全不懂软件。
2015 年 3 月 24 日,星期二,上午 9:01,Thomas Robitaille < [email protected]
写道:
@ericholscher https://github.com/ericholscher - 是的,我们已经打电话
但是我们看到:/usr/lib/pymodules/python2.7/matplotlib/初始化的.py:1173:UserWarning:此调用matplotlib.use()有没有影响
因为已经选择了后端;
matplotlib.use() 必须在_before_ pylab、matplotlib.pyplot、
或者 matplotlib.backends 是第一次导入。这表明已经预先设置了后端。
—
直接回复此邮件或在 GitHub 上查看
https://github.com/rtfd/readthedocs.org/issues/1195#issuecomment -85576963
.
埃里克·霍尔舍
居住在波特兰的互联网制造商,或者
http://ericholscher.com
也许@mdboom有一些想法 - 我也对目前的行为感到有些困惑。 基本上我不明白它是如何改变使用 TkAgg (因为 RTD 上的默认值似乎是 Agg )。
啊,对不起,我想我有。 看看这个极简主义的项目:
https://github.com/astrofrog/test-rtd
RTD 日志 (https://readthedocs.org/builds/test-rtd-astrofrog/2482239/) 显示:
Making output directory...
Running Sphinx v1.2.2
TkAgg
所以默认后端设置为 TkAgg。
@mdboom ,您对如何确保系统范围内的默认后端是 Agg 而不是 TkAgg 有什么建议吗? RTD 上没有理由需要 TkAgg 后端。
看起来 /etc/matplotlibrc 中有一个设置它的配置。
2015 年 3 月 24 日,星期二,上午 9:14,Thomas Robitaille < [email protected]
写道:
啊,对不起,我想我有。 看看这个极简主义的项目:
https://github.com/astrofrog/test-rtd
RTD 日志 (https://readthedocs.org/builds/test-rtd-astrofrog/2482239/)
显示:制作输出目录...
运行 Sphinx v1.2.2
TkAgg所以默认后端设置为 TkAgg。
@mdboom https://github.com/mdboom ,你有什么建议吗?
确保系统范围内的默认后端是 Agg,而不是 TkAgg?—
直接回复此邮件或在 GitHub 上查看
https://github.com/rtfd/readthedocs.org/issues/1195#issuecomment -85586195
.
埃里克·霍尔舍
居住在波特兰的互联网制造商,或者
http://ericholscher.com
@ericholscher - 太好了,你能把它改成Agg
吗? 没有理由在像 RTD 这样的无显示服务器上它应该是其他任何东西。 那么没有人将需要使用matplotlib.use
解决方法。
@ericholscher - 现在似乎可以正常工作了,您是否进行了更改? 如果是这样,这个问题可以关闭:)
是的,应该改了。 将保持打开状态,因为它需要修复
我们的部署脚本也是如此,所以当我们更新一个新的时它不会再次中断
构建服务器。
2015 年 3 月 24 日,星期二,上午 10:53,Thomas Robitaille <
[email protected]> 写道:
@ericholscher https://github.com/ericholscher - 它似乎有效
现在,你做出改变了吗? 如果是这样,这个问题可以关闭:)—
直接回复此邮件或在 GitHub 上查看
https://github.com/rtfd/readthedocs.org/issues/1195#issuecomment -85620289
.
埃里克·霍尔舍
居住在波特兰的互联网制造商,或者
http://ericholscher.com
相信这应该是固定的。
你好,我遇到了同样的问题
“因为已经选择了后端;matplotlib.use() 必须在 _before_ pylab、matplotlib.pyplot 或 matplotlib.backends 首次导入之前调用。”
我想知道如何配置 /etc/matplotlibrc 来解决这个问题。
谢谢 !!!
嗨,任何人都可以评论如何解决这个问题。 如何配置/etc/matplotlibrc来解决这个问题。
将这些行放在 Py 代码的开头就解决了这个目的:
导入 matplotlib
matplotlib.use('Agg')
你好,
这对我不起作用
导入 matplotlib
matplotlib.use('Agg')
所以我用:
导入 matplotlib.pyplot 作为 plt
plt.switch_backend('agg')
那行得通。 也许它对其他人有帮助。
您好,我在 spyder 中工作,在@windows 中,这有用:
转到“工具”>“首选项”>“IPython 终端”>“图形”(菜单名称是近似值,因为我的 spyder 是西班牙语)
在此处,取消选中“激活支持”框。
重新启动 spyder,然后键入:
导入 matplotlib
matplotlib.use('TkAgg')
导入 matplotlib.pyplot 作为 plt
a = [1, 2, 3, 4]
b = [2, 4, 6, 8]
plt.plot(a, b)
我希望这可以帮助你。
难道这个问题在 Python 3.6 镜像中又出现了? 既然它得到了
No module named '_tkinter'
用于导入带有最新图像的 matplotlib 的模块。
@Tillsten您是否尝试在您的 requirements.txt 文件中指定该要求? 如果您仍然认为问题与 rtd 相关,请使用您的 rtd 项目链接打开一个新问题。
是的,我做到了。 问题似乎与此问题相同:安装了 matplotlib,但默认后端设置为 tkagg(使用 tkinter),这在 headless rtd-image 上不可用。 这个问题可以通过像上面那样更改 rc 文件或将 matplotlib 升级到 3.0 来解决,这应该可以解决这个问题。
我目前的解决方法是在 sphinx conf.py
导入和设置 matplotlib 后端:
import matplotlib
matplotlib.use('agg')
感谢分享解决方法! 稍后我会看一下 docker 图像
我在 docker 图像上没有看到与此相关的任何其他内容,因此,不确定这是如何解决的(也许 rtd 那时没有使用 docker 图像?)。 我们有一个解决方法,所以,不确定我们是否应该重新打开。 也许将此添加到常见问题解答中?
最有用的评论
你好,
这对我不起作用
导入 matplotlib
matplotlib.use('Agg')
所以我用:
导入 matplotlib.pyplot 作为 plt
plt.switch_backend('agg')
那行得通。 也许它对其他人有帮助。