2013-01-23 64 views
5

我在通過Apache在Mac OS X 10.7.5服務的Django應用程序中使用matplotlib,但我無法讓它爲我繪製一個數字。我已經導入進口matplotlib.pyplot as plt,並在我看來,線,setugid()錯誤使用matplotlib與Apache和Django

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的error_log

。恐怕我不知道setugid()是什麼,或者如何讓它運行它允許我的應用程序。 我$MPLCONFIGDIR設置爲/tmp/.mplconfig和Apache作爲用戶_www已經寫了幾個空目錄,所以這似乎工作正常。 任何人都可以給我一個線索嗎?

更新:如果我

from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas 
from matplotlib.figure import Figure 

,併成立了一個人物,次要情節和軸(整一堆),我可以savefig()沒有一個錯誤...沒有pyplot需要什麼額外的權限?

+0

更多信息[here](https://blogs.oracle.com/dns/entry/understanding_the_authorization_framework_on)。似乎OS X上的安全設置阻止了它,並且快速修復似乎是以root身份運行apache。 – tiago

+0

感謝您的回覆tiago。雖然以root身份完全明智地運行apache? – xnx

+0

在Linux/Unix中,apache通常以root身份啓動,但是以'nobody'用戶身份運行。我不知道你的具體情況是否明智。 – tiago

回答

1

使用AGG後端進口matplotlibSierra

import matplotlib as mpl 

mpl.use('agg') 
0

擺脫了setugid()誤差在Flask appOS X Server下運行後,您還可以在全球範圍內~/.matplotlib/matplotlibrc添加後端配置您的系統,如:

backend: TkAgg 

這也將解決您的問題。如果您沒有matplotlibrc,只需創建一個。