2013-10-10 3 views
9

У меня возникли проблемы с запуском скрипта web.py в mod_wsgi. Сценарий использует numpy и opencv.ImportError: numpy.core.multiarray не удалось импортировать при использовании mod_wsgi

Вот подробности моей проблемы.

У меня две версии python на поле, но я хочу, чтобы скрипт работал с python2.7. Таким образом, с переводчиком, я гарантировал, что я могу импортировать резюме и 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' 

Я скачал mod_wsgi из источника и сконфигурировано и установил его с ниже командой:

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

Обеспечение того, чтобы mod_wsgi сконфигурировано должным образом.

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

Кроме того, я следующий в моем httpd.conf

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

директории пакетов Сайт содержит следующие файлы:

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 

Вот сценарий:

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

Когда я получить доступ скрипт из браузера я вижу ошибку ниже в error_log

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

уведомления, что это происходит на import cv2 линии. Если я тоже это прокомментирую, как и import numpy as np, тогда мой скрипт отлично работает.

Я гарантировал, что у меня есть следующие файлы:

$ 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 

Мой файл python2.7 конфигурации показывает:

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 

Вопрос

Что я могу сделать, чтобы решить Эта проблема?

+0

Вы нашли решение для этой проблемы? – samkhan13

+1

Произошла ли ошибка, если вы импортировали только свой номер в свой скрипт wsgi? Если это не произойдет, попробуйте поставить import numpy перед импортом cv2, что могло бы помочь. – Aldarund

ответ

3

для Windows! Вам необходимо загрузить и установить NumPy 1.6.1 и SciPy 0.9.0 (вам также необходимо выбрать файлы, которые поддерживают Python 2.7)

+1

Вы говорите, что мне нужны эти конкретные версии, чтобы работать над 'mod_wsgi'? – Anthony

+0

Отстой, но все же кажется правдой. – Michael

1

Установить numpy с pip install numpy. Я создал virtualenv и установил все пакеты, и ошибок нет. Может возникнуть проблема со старым NumPy, у меня есть версия 1.8.1. Мои переменные внутри Apache виртуального хоста являются:

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/ 

Я думаю, что вам не нужно /usr/local/lib/python2.7/dist-packages/ путь, потому что это только Linuces на основе Debian.

Если вы подозреваете, что проблема связана с OpenCV, то с командой locate cv2.so вы получите путь, где находится общий модуль OpenCV, и этот каталог должен находиться в WSGIPythonPath.

Смежные вопросы