为什么 matplotlib 不能在带有 web2py 的 digitalocean VPS 上工作?

Why does matplotlib not work on a digitalocean VPS with web2py?

我有一个 digitalocean droplet,我使用它部署了 web2py script。我按如下方式安装了matplotlib:

ssh root@ipdroplet
apt-get install python-matplotlib

我确实可以导入 matplotlib 如果我在 ssh 之后在命令行上简单地 运行 python。问题是当我 运行 我的应用程序出现以下错误时:

<type 'exceptions.ImportError'> Cannot import module applications.app.modules.matplotlib

我猜这与用户 www-dataroot 有关,但不知道如何解决。非常感谢任何帮助。不幸的是,this link 中提到的提示对我没有帮助。

谢谢

编辑

我还应该提一下,我没有使用 web2py 的二进制版本。我还通过 sudo -u www-data python 成功地将 运行 python 作为 www-data,我可以在那里导入 matplotlib 就好了。

EDIT2

当我 运行 在本地使用 web2py 2.11.2-stable 时,它​​运行良好。在我的服务器上,虽然我在 2.12.3-stable 下。我猜这可能是原因。

所以我想出了一个解决办法。

因为它想在 web2py 应用程序的模块文件夹中找到 matplotlib 模块,所以我从那里创建了一个符号 link 到实际安装。然后我还需要更改后端,因为 trick 没用。

ln -s modules/matplotlib path_to_matplotlib

我得到 path_to_matplotlib 的方法是:

~#: python
>>> import matplotlib
>>> matplotlib
<module 'matplotlib' from '/usr/lib/pymodules/python2.7/matplotlib>/__init__.pyc
>>> print matplotlib.matplotlib_fname() # This will give the path to the backend settings
/etc/matplotlibrc

所以 link 命令看起来像:

ln -s /home/www-data/web2py/applications/app/modules/matplotlib /usr/lib/pymodules/python2.7/matplotlib

我还需要更改后端,你得到如上所示的路径(matplotlib_fname())。找到显示后端的行,并确保将其设置为 Agg.

backend: Agg

通常设置为TkAgg