使用Apache和Django时,使用matplotlib出现setugid()错误

6

我正在使用matplotlib在Mac OS X 10.7.5上通过apache提供的Django应用程序中,但我无法绘制出图形。 我已经导入了import matplotlib.pyplot as plt,并在我的视图中使用了该行代码:

plt.plot(x, y)

(xy是numpy数组)导致了错误。
2013-01-23 16:39:16.731 httpd[381:203] The application with bundle ID (null) is running setugid(), which is not allowed.

在我的Apache错误日志中,我不知道setugid()是什么,也不知道如何允许我的应用程序运行它。我的$MPLCONFIGDIR设置为/tmp/.mplconfig,并且作为用户_www的Apache已经向其中写入了一些空目录,因此这似乎运行得很好。有人能够给我一个提示吗?
更新:如果我
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure

如果我设置了一个图形、子图和轴(整个组合),我可以在不出错的情况下使用savefig()... pyplot需要什么额外的权限?


更多信息请点击此处。看起来OS X上的安全设置正在阻止它,快速解决方法似乎是以root身份运行apache。 - tiago
谢谢回复,Tiago。但是,将Apache作为root用户运行是否完全明智呢? - xnx
在Linux/Unix中,Apache通常以root用户身份启动,但以“nobody”用户身份运行。我不知道在你的特定情况下是否明智。 - tiago
2个回答

3

在导入matplotlib之后使用聚合后端,可以消除在Sierra下运行的OS X Server中的Flask应用程序中出现的setugid()错误。

import matplotlib as mpl

mpl.use('agg')

0

您还可以在系统中全局添加后端配置,例如在~/.matplotlib/matplotlibrc文件中:

backend: TkAgg

这也将解决您的问题。如果您没有matplotlibrc,只需创建一个即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接