I'm having trouble running a web.py
script in mod_wsgi
. The Script uses numpy and opencv.
Here are the details of my problem.
I've got two python versions on the box but I want the script to run with python2.7. So from the interpreter I've ensured that I can import cv and numpy
$ python
Python 2.7.3 (default, Oct 8 2013, 15:53:09)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> import numpy
>>> import sys
>>> sys.prefix
'/usr/local'
I downloaded mod_wsgi from the source and configured and installed it with the command below:
./configure --with-python=/usr/local/bin/python2.7 --with-apxs=/usr/sbin/apxs
LD_RUN_PATH=/usr/local/lib/ make
sudo make install
Ensuring that mod_wsgi is configured properly.
$ ldd /usr/lib64/httpd/modules/mod_wsgi.so
linux-vdso.so.1 => (0x00007fff36dff000)
libpython2.7.so.1.0 => /usr/local/lib/libpython2.7.so.1.0 (0x00007f9462710000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f94624e8000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f94622e4000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f94620e1000)
libm.so.6 => /lib64/libm.so.6 (0x00007f9461e5c000)
libc.so.6 => /lib64/libc.so.6 (0x00007f9461ac9000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9462d15000)
Additionally, I have the following in my httpd.conf
WSGIPythonHome /usr/local
WSGIPythonPath /usr/local/lib/python2.7/site-packages/
the site packages directory contains the following files:
cv2.so
cv.py
distribute-0.6.35-py2.7.egg
easy-install.pth
numpy-1.7.1-py2.7-linux-x86_64.egg
README
setuptools-0.6c11-py2.7.egg-info
setuptools.pth
web.py-0.37-py2.7.egg
Here is the script:
import web
import json
import cv2
#import numpy as np
urls = (
'.*', 'Sample'
)
class Sample:
def GET(self):
user_data = web.input()
return json.dumps(self.perform(user_data.color, user_data.shade))
def perform (self,color, shade):
return {'color': color, 'shade': shade}
application = web.application(urls, globals()).wsgifunc()
When I access the script from browser I see the error below in error_log
[error] ImportError: numpy.core.multiarray failed to import
notice that this happens on import cv2
line. If I comment that as well, just like import numpy as np
then my script works fine.
I've ensured that I have the following files:
$ sudo find / -name libpython2.7.a
/usr/local/lib/python2.7/config/libpython2.7.a
/usr/local/lib/libpython2.7.a
$ sudo find / -name libpython2.7.so*
/usr/local/lib/libpython2.7.so
/usr/local/lib/libpython2.7.so.1.0
/usr/lib/libpython2.7.so
/usr/lib/libpython2.7.so.1.0
My python2.7 config file shows:
config.c
config.c.in
install-sh
libpython2.7.a
libpython2.7.so -> ../../libpython2.7.so
libpython2.7.so.1.0 -> ../../libpython2.7.so.1.0
Makefile
makesetup
python.o
Setup
Setup.config
Setup.local
Question
What can I do to resolve this issue?
for Windows ! You need to download and install NumPy 1.6.1 and SciPy 0.9.0 (you need to choose the files which support Python 2.7 too)
Install numpy
with pip install numpy
. I created virtualenv
and installed all packages and there are no errors. Might be problem with old NumPy, I have version 1.8.1. My variables inside Apache virtual host are:
WSGIPythonHome /path/to/webpy_virtualenv/local
WSGIPythonPath /path/to/virtualenv/lib/python2.7/site-packages/:/usr/local/lib/python2.7/site-packages/:/usr/local/lib/python2.7/dist-packages/
I think that you don't need /usr/local/lib/python2.7/dist-packages/
path because that is for Debian based Linuces only.
If you suspect that problem is actually with with OpenCV that with command locate cv2.so
you will get path where OpenCV shared module resides and that directory must be in WSGIPythonPath
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With