2013-10-10 20 views
9

Mam problem z uruchomieniem skryptu web.py w mod_wsgi. Skrypt używa numpy i opencv.ImportError: numpy.core.multiarray nie można zaimportować podczas używania mod_wsgi

Oto szczegóły mojego problemu.

Mam dwie wersje python na polu, ale chcę uruchomić skrypt z python2.7. Tak więc od tłumacza mam zapewnione, że mogę importować CV i 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' 

Pobrałem mod_wsgi od źródła i skonfigurowany i zainstalowany z poniższej komendy:

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

Zapewnienie mod_wsgi jest skonfigurowany prawidłowo.

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

Dodatkowo, mam następujących w moim httpd.conf

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

katalogu pakietów strona zawiera następujące pliki:

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 

Oto scenariusz:

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

Kiedy dostęp do skryptu z przeglądarki widzę błąd poniżej error_log

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

uprzedzenia, że ​​to dzieje się na import cv2 linii. Jeśli również to skomentuję, podobnie jak import numpy as np, mój skrypt działa dobrze.

mam zapewnione, że mam następujące pliki:

$ 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 

Mój plik config python2.7 Wystawy:

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 

Pytanie

Co mogę zrobić, aby rozwiązać ten przypadek?

+0

znalazłeś rozwiązanie dla tego problemu? – samkhan13

+1

Czy błąd wystąpił, jeśli importujesz tylko numpy do skryptu wsgi? Jeśli tak się nie stanie spróbuj umieścić import numpy przed importem cv2, co może pomóc. – Aldarund

Odpowiedz

3

dla systemu Windows! Musisz pobrać i zainstalować NumPy 1.6.1 i SciPy 0.9.0 (musisz wybrać pliki, które obsługują również Python 2.7)

+1

mówisz, że potrzebuję tych konkretnych wersji, aby działały na 'mod_wsgi'? – Anthony

+0

Wychodzi, ale nadal wydaje się być prawdą. – Michael

1

Zainstaluj numpy z pip install numpy. Stworzyłem virtualenv i zainstalowałem wszystkie pakiety i nie ma błędów. Może być problem ze starym NumPy, mam wersję 1.8.1. Moi zmienne wewnątrz Apache wirtualnego hosta to:

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/ 

myślę, że nie trzeba /usr/local/lib/python2.7/dist-packages/ ścieżkę, ponieważ jest to tylko dla Debiana Linuces bazie.

Jeśli podejrzewasz, że problem dotyczy OpenCV, to za pomocą polecenia locate cv2.so otrzymasz ścieżkę, w której znajduje się moduł współdzielony OpenCV, a katalog ten musi znajdować się w WSGIPythonPath.

Powiązane problemy