本文共 927 字,大约阅读时间需要 3 分钟。
这几天在容器内部署了一个数据实时预处理+模型计算的服务,在物理机的图形界面下运行正常,但涉及到matplotlib的pyplot,放到纯命令行的容器里却报错了(如题),网上也查到了问题原因,并不是因为没装python3-tk和tk-dev,而是因为matplotlib的backend设置不当造成的。
matplotlib面向不同的用例和输出格式。有的是通过python的命令行交互式地使用matplotlib,并在输入命令时弹出绘图窗口。有的是将matplotlib嵌入到诸如wxpython、pygtk等图形用户截面中来构建丰富的应用程序。有的是在批处理脚本中使用matplotlib从一些数值模拟中生成postscript图像以及web应用服务动态生成图像。
为了支持所有这些用例,matplotlib可以面向不同的输出,每一种都称为后端“backend”。backend在幕后做所有的制作图形的工作。后端分为交互式和非交互式两种。交互式用于pygtk、wxpython、tkinter、qt4或macosx,也称为用户界面后端。非交互式是指PNG、SVG、PDF、PS等,也称为硬拷贝后端。
import matplotlibmatplotlib.use('Agg')
需要注意的是:use()函数要在在导入matplotlib.pyplot之前使用,否则use函数无效。
python3 test.py -dbackend Agg
使用时要注意-d参数与其他解析命令行参数的冲突问题。
export MPLBACKEND=AggMPLBACKEND=Agg python test.py
以上几种方法大家根据需要选择,像在容器内部使用的话,还是选择第一种合适,一劳永逸!
1、
2、转载地址:http://htrti.baihongyu.com/