我有一个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稳定。我猜这可能是原因。
答案 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
。