2013-10-10 16 views
9

Tôi gặp sự cố khi chạy tập lệnh web.py trong mod_wsgi. Script sử dụng numpy và opencv.NhậpError: numpy.core.multiarray không nhập được khi đang sử dụng mod_wsgi

Dưới đây là chi tiết về sự cố của tôi.

Tôi có hai phiên bản python trên hộp nhưng tôi muốn tập lệnh chạy với python2.7. Vì vậy, từ người phiên dịch tôi đã chắc chắn rằng tôi có thể nhập cv và 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' 

tôi tải mod_wsgi từ nguồn và cấu hình và cài đặt nó bằng lệnh dưới đây:

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

Đảm bảo mod_wsgi được cấu hình đúng.

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

Ngoài ra, tôi đã điều sau đây trong httpd.conf

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

thư mục gói trang web của tôi chứa các tập tin sau đây:

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 

Đây là kịch bản:

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

Khi tôi truy cập vào các tập lệnh từ trình duyệt tôi thấy các lỗi dưới đây trong error_log

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

thông báo rằng điều này xảy ra trên import cv2 dòng. Nếu tôi cũng nhận xét điều đó, giống như import numpy as np thì tập lệnh của tôi hoạt động tốt.

tôi đã chắc chắn rằng tôi có các tập tin sau đây:

$ 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 tập tin python2.7 cấu hình cho thấy:

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 

Câu hỏi

Những gì tôi có thể làm gì để giải quyết vấn đề này?

+0

bạn có tìm thấy giải pháp cho prob này không? – samkhan13

+1

Đã xảy ra lỗi nếu bạn chỉ nhập gọn gàng trong tập lệnh wsgi của mình? Nếu nó không xảy ra cố gắng để nhập khẩu nhập trước khi nhập khẩu cv2, có thể giúp đỡ. – Aldarund

Trả lời

3

dành cho Windows! Bạn cần tải xuống và cài đặt NumPy 1.6.1 và SciPy 0.9.0 (bạn cần chọn các tệp hỗ trợ Python 2.7)

+1

bạn có nói rằng tôi cần những phiên bản cụ thể này để làm việc trên 'mod_wsgi'? – Anthony

+0

Sucks nhưng vẫn có vẻ đúng. – Michael

1

Cài đặt numpy với pip install numpy. Tôi đã tạo virtualenv và cài đặt tất cả các gói và không có lỗi. Có thể là vấn đề với NumPy cũ, tôi có phiên bản 1.8.1. Các biến của tôi bên trong máy chủ ảo Apache là:

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/ 

Tôi nghĩ rằng bạn không cần /usr/local/lib/python2.7/dist-packages/ đường dẫn vì chỉ dành cho Debian dựa.

Nếu bạn nghi ngờ vấn đề đó thực sự là với OpenCV với lệnh locate cv2.so bạn sẽ nhận được đường dẫn nơi mô-đun chia sẻ OpenCV cư trú và thư mục đó phải ở trong WSGIPythonPath.

Các vấn đề liên quan