2013-10-10 8 views
9

Ho problemi durante l'esecuzione di uno script web.py in mod_wsgi. Lo script usa numpy e opencv.ImportError: numpy.core.multiarray non è riuscito a eseguire l'importazione durante l'utilizzo di mod_wsgi

Ecco i dettagli del mio problema.

Ho due versioni python sulla scatola ma voglio che lo script sia eseguito con python2.7. Così dall'interprete che ho assicurato che posso importare cv e 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' 

ho scaricato mod_wsgi dalla sorgente e configurato e installato con il seguente comando:

./configure --with-python=/usr/local/bin/python2.7 --with-apxs=/usr/sbin/apxs 
LD_RUN_PATH=/usr/local/lib/ make 
sudo make install 

Garantire che mod_wsgi è configurato propriamente.

$ 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) 

Inoltre, ho il seguente nel mio httpd.conf

WSGIPythonHome /usr/local 
WSGIPythonPath /usr/local/lib/python2.7/site-packages/ 

directory packages sito contiene i seguenti file:

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 

Ecco lo 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() 

Quando accedo lo script dal browser vedo l'errore sotto in error_log

[error] ImportError: numpy.core.multiarray failed to import 

avviso che questo accade su import cv2 linea. Se commento così, proprio come import numpy as np allora il mio script funziona bene.

ho assicurato che ho i seguenti file:

$ 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 

Il mio file di configurazione python2.7 mostra:

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 

Domanda

Che cosa posso fare per risolvere questa edizione?

+0

hai trovato una soluzione per questo problema? – samkhan13

+1

L'errore si è verificato se si importa solo numpy nello script wsgi? Se non si verifica, provare a importare numpy prima di importare cv2, che potrebbe essere di aiuto. – Aldarund

risposta

3

per Windows! È necessario scaricare e installare NumPy 1.6.1 e SciPy 0.9.0 (è necessario scegliere anche i file che supportano Python 2.7)

+1

stai dicendo che ho bisogno di quelle versioni specifiche affinché questo funzioni su 'mod_wsgi'? – Anthony

+0

Succhia ma sembra ancora vero. – Michael

1

Installare numpy con pip install numpy. Ho creato virtualenv e ho installato tutti i pacchetti e non ci sono errori. Potrebbe essere un problema con il vecchio NumPy, ho la versione 1.8.1. Le mie variabili all'interno host virtuale di Apache sono:

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/ 

Penso che non hai bisogno di /usr/local/lib/python2.7/dist-packages/ percorso perché questo è solo per Linuces basati su Debian.

Se si sospetta che il problema sia effettivamente con OpenCV, con il comando locate cv2.so si otterrà il percorso in cui risiede il modulo condiviso OpenCV e quella directory deve essere in WSGIPythonPath.

Problemi correlati