首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ImportError:没有名为cv2 - WSGI + python + apache的模块

ImportError:没有名为cv2 - WSGI + python + apache的模块
EN

Stack Overflow用户
提问于 2016-08-16 18:32:16
回答 2查看 1.1K关注 0票数 0

我正试图通过WSGI在我的Amazon EC2服务器上运行一个python应用程序,我一直收到这个错误:

代码语言:javascript
复制
[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"):

代码语言:javascript
复制
/var/www/html/lumos/opencv/build/lib/cv2.so
/usr/local/lib/python2.7/dist-packages/cv2.so

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

代码语言:javascript
复制
WSGIPythonPath /usr/local/lib/python2.7/site-packages/:/usr/local/lib/python2.7/dist-packages/

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

代码语言:javascript
复制
$ python
>>>import cv2 #no import error
>>> 

当我安装mod_wsgi时,使用的是:

代码语言:javascript
复制
mod_wsgi-python26-3.2-6.11.amzn1.x86_64

这是我的wsgi.py文件

代码语言:javascript
复制
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:

代码语言:javascript
复制
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一起工作?任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-16 21:46:08

因此,根据医生们,在使用守护进程模式时不能使用WSGIPythonPath。

所以我指定的python路径甚至没有做任何事情。为了解决这个问题,我使用了WSGIDaemonProcess指令的‘python’选项。

在我的httpd.conf文件中,我删除了以下内容:

代码语言:javascript
复制
WSGIPythonPath /usr/local/lib/python2.7/site-packages/:/usr/local/lib/python2.7/dist-packages/

并改变了这一点:

代码语言:javascript
复制
WSGIDaemonProcess lumos threads=5

对此:

代码语言:javascript
复制
WSGIDaemonProcess lumos threads=5 python-path=/usr/local/lib/python2.7/site-packages/:/usr/local/lib/python2.7/dist-packages/

所以我的最后一个httpd.conf是这样的:

代码语言:javascript
复制
<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开始工作了。

票数 1
EN

Stack Overflow用户

发布于 2016-08-16 23:39:13

您的设置失败了,因为mod_wsgi是为Python2.6编译的,而不是专门为您想要使用的Python2.7安装编译的。您不应该将Python2.7安装中的site-packagesdict-packages强制放到模块搜索路径中,因为这是Python2.6环境。首先,您仍然运行错误的Python版本;其次,这些目录中的任何扩展模块都可能失败,并可能导致进程崩溃。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38982107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档