Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ImportError: numpy.core.multiarray failed to import while using mod_wsgi

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?

like image 339
Anthony Avatar asked Oct 10 '13 23:10

Anthony


2 Answers

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)

like image 169
bestyasser Avatar answered Sep 21 '22 17:09

bestyasser


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.

like image 28
P̲̳x͓L̳ Avatar answered Sep 22 '22 17:09

P̲̳x͓L̳