【问题标题】:Why does matplotlib not work on a digitalocean VPS with web2py?为什么 matplotlib 不能在带有 web2py 的 digitalocean VPS 上工作?
【发布时间】:2015-12-02 10:18:37
【问题描述】:

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

ssh root@ipdroplet
apt-get install python-matplotlib

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

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

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

谢谢

编辑

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

EDIT2

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

【问题讨论】:

    标签: python nginx matplotlib web2py digital-ocean


    【解决方案1】:

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

    因为它想在 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
    

    所以链接命令看起来像:

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

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

    backend: Agg
    

    通常设置为TkAgg

    【讨论】:

    • 您应该在 Google 网上论坛上报告此事。虽然 web2py 会首先在应用程序的“模块”文件夹中查找,但它当然不需要在那里找到所有模块——如果没有找到,它会搜索 sys.path 的其余部分。
    • 嗯...我过去曾尝试在 Google 群组上发帖,但惨遭失败。如果您认为有用,请随时发布指向此问题和答案的链接。我会尝试向 Google 群组发帖,但对它的工作期望很低
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    相关资源
    最近更新 更多