【问题标题】:ImportError: No module named cv2 — WSGI + python + apacheImportError: No module named cv2 — WSGI + python + apache
【发布时间】:2016-12-23 06:05:54
【问题描述】:

我正在尝试通过 WSGI 在我的 apache Amazon EC2 服务器上运行 python 应用程序,但我不断收到此错误:

[Tue Aug 16 18:22:57 2016] [error] [client 72.219.147.5] mod_wsgi (pid=28751): Target WSGI script '/var/www/html/lumos/wsgi.py' cannot be loaded as Python module.
[Tue Aug 16 18:22:57 2016] [error] [client 72.219.147.5] mod_wsgi (pid=28751): Exception occurred processing WSGI script '/var/www/html/lumos/wsgi.py'.
[Tue Aug 16 18:22:57 2016] [error] [client 72.219.147.5] Traceback (most recent call last):
[Tue Aug 16 18:22:57 2016] [error] [client 72.219.147.5]   File "/var/www/html/lumos/wsgi.py", line 11, in <module>
[Tue Aug 16 18:22:57 2016] [error] [client 72.219.147.5]     import app
[Tue Aug 16 18:22:57 2016] [error] [client 72.219.147.5]   File "/var/www/html/lumos/app.py", line 2, in <module>
[Tue Aug 16 18:22:57 2016] [error] [client 72.219.147.5]     import main
[Tue Aug 16 18:22:57 2016] [error] [client 72.219.147.5]   File "/var/www/html/lumos/main.py", line 1, in <module>
[Tue Aug 16 18:22:57 2016] [error] [client 72.219.147.5]     import mod_one
[Tue Aug 16 18:22:57 2016] [error] [client 72.219.147.5]   File "/var/www/html/lumos/mod_one.py", line 1, in <module>
[Tue Aug 16 18:22:57 2016] [error] [client 72.219.147.5]     import cv2
[Tue Aug 16 18:22:57 2016] [error] [client 72.219.147.5] ImportError: No module named cv2

这是 cv2.so 文件所在的位置 (sudo find / -name "cv2.so"):

/var/www/html/lumos/opencv/build/lib/cv2.so
/usr/local/lib/python2.7/dist-packages/cv2.so

我已将 WSGI Python 路径设置为该文件所在的位置:

WSGIPythonPath /usr/local/lib/python2.7/site-packages/:/usr/local/lib/python2.7/dist-packages/

我知道 opencv 安装正确,因为当我执行以下操作时,没有错误:

$ python
>>>import cv2 #no import error
>>> 

当我安装 mod_wsgi 时,使用了这个:

mod_wsgi-python26-3.2-6.11.amzn1.x86_64

这是我的 wsgi.py 文件

import os, sys

sys.path.insert(0, "/var/www/html/lumos")

import bottle
import app

application = bottle.default_app() #using bottle.py web-framework

这是我的 httpd.conf:

WSGISocketPrefix /var/run/wsgi
WSGIPythonPath /usr/local/lib/python2.7/site-packages/:/usr/local/lib/python2.7/dist-packages/

<VirtualHost *>
ServerName lumos.website.me
DocumentRoot /var/www/html/lumos

WSGIDaemonProcess lumos threads=5
WSGIScriptAlias / /var/www/html/lumos/app.wsgi
        <Directory "/var/www/html/lumos">
                WSGIProcessGroup lumos
                WSGIApplicationGroup %{GLOBAL}
                Order deny,allow
                Allow from all
        </Directory>
</VirtualHost>

当我运行python -V 时,我得到Python 2.7.10.

如何使 mod_wsgi 与 opencv 一起工作?任何帮助表示赞赏。

【问题讨论】:

    标签: python apache opencv amazon-web-services amazon-ec2


    【解决方案1】:

    好吧,事实证明,根据the docs,在使用守护程序模式时不能使用 WSGIPythonPath。

    所以我指定的 python 路径甚至没有做任何事情。为了解决这个问题,我改用了WSGIDaemonProcess directive 的“python-path”选项。

    在我的httpd.conf 文件中,我删除了这个:

    WSGIPythonPath /usr/local/lib/python2.7/site-packages/:/usr/local/lib/python2.7/dist-packages/
    

    并改变了这个:

    WSGIDaemonProcess lumos threads=5
    

    到这里:

    WSGIDaemonProcess lumos threads=5 python-path=/usr/local/lib/python2.7/site-packages/:/usr/local/lib/python2.7/dist-packages/
    

    所以我的最终httpd.conf 看起来像这样:

    <VirtualHost *>
    ServerName lumos.website.me
    DocumentRoot /var/www/html/lumos
    
    WSGIDaemonProcess lumos threads=5 python-path=/usr/local/lib/python2.7/site-packages/:/usr/local/lib/python2.7/dist-packages/
    WSGIScriptAlias / /var/www/html/lumos/wsgi.py
            <Directory "/var/www/html/lumos">
                    WSGIProcessGroup lumos
                    WSGIApplicationGroup %{GLOBAL}
                    Order deny,allow
                    Allow from all
            </Directory>
    </VirtualHost>
    

    现在 cv2 可以工作了。

    【讨论】:

      【解决方案2】:

      您的设置已损坏,因为 mod_wsgi 是为 Python 2.6 编译的,而不是专门为您要使用的 Python 2.7 安装编译的。您不应将 Python 2.7 安装中的 site-packages 和 dict-packages 强制放入 Python 2.6 环境的模块搜索路径中。首先,您仍在运行错误的 Python 版本,其次,这些目录中的任何扩展模块都可能会失败并可能导致进程崩溃。

      您必须从系统包中卸载您正在使用的 mod_wsgi 并安装为 Python 2.7 编译的版本。因为您使用的是非标准 Python 安装,您可能需要从源代码构建 mod_wsgi。

      【讨论】:

      • 我再次检查,我从错误日志中找到的 WSGI 版本实际上已经过时(因为我在错误日志中向上滚动很远才能找到该行)。实际上,从那时到现在,我已经从 python 2.7 的源代码安装了一个 WSGI 版本,这就是代码最终运行的原因。
      • 我从我的问题中删除了 WSGI 版本行,因为它不正确。
      • 您仍然不需要将dist-packages 和site-packages 自己添加到Python 模块搜索路径中。如果你这样做,仍然有一些潜在的错误。除了/usr/local 之外,您是否还在/usr 下安装了Python 2.7?
      猜你喜欢
      • 2016-12-19
      • 2017-03-31
      • 1970-01-01
      • 2015-11-11
      • 2015-09-10
      • 2015-06-12
      • 2011-04-08
      • 2016-08-09
      • 1970-01-01
      相关资源
      最近更新 更多