为什么matplotlib无法在带有web2py的digitalocean VPS上运行?

时间:2015-09-06 22:19:19

标签: python nginx matplotlib web2py digital-ocean

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

ssh root@ipdroplet
apt-get install python-matplotlib

如果我在ssh'd之后只是在命令行上运行matplotlib,我确实可以导入python。问题是,当我运行我的应用程序时,我收到以下错误:

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

我猜这与用户www-data vs root有关,但不知道如何解决它。任何帮助非常感谢。遗憾的是,this链接中提到的提示对我没有帮助。

由于

修改

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

EDIT2

当我在web2py 2.11.2-stable上本地运行时,它工作正常。在我的服务器上,虽然我在2.12.3稳定。我猜这可能是原因。

1 个答案:

答案 0 :(得分:0)

所以我想出了一个解决方案。

因为它想在web2py应用程序的模块文件夹中找到matplotlib模块,所以我创建了一个从那里到实际安装的符号链接。然后我需要更改后端,因为小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