2010-04-01 16 views
5

Todo funciona como se supone en el servidor de desarrollo Django. En Apache, la aplicación django también funciona, excepto cuando se usa matplotlib. Aquí está el error que consigo:Matplotlib y WSGI/mod_python no funcionan en Apache

No module named multiarray. 

Exception Type: ImportError 
Exception Value: No module named multiarray 
Exception Location: /usr/share/pyshared/numpy/core/numerictypes.py in <module>, line 81 
Python Executable: /usr/bin/python 
Python Version: 2.6.4 

Desde el shell de pitón, ambas sentencias funcionan: numpy.core.multiarray importación y multiarray importación. ¿Algunas ideas? Gracias

Mientras busco en los archivos numpy, encontré el módulo multiarray, que tiene una extensión de 'so'. Mi suposición es que mod_python no está leyendo estos archivos.

+0

¿Qué sucede si lo haces "desde numpy.core.multiarray import typeinfo, ndarray, array, empty, dtype" del shell de python? – Mark

+0

que funciona bien. no hay mensajes de error –

+0

Parece que tengo un problema similar. Estoy ejecutando py2.6, cherrypy, IIS, isapi_wsgi. Matplotlib funciona bien desde el shell de Python. Intentar cargar módulos pyd (por ejemplo, matplotlib._path) falla cuando lo llama IIS. Revisé os.environ y sys.path. – e1i45

Respuesta

8

Problema resuelto. Esto es lo que hice.

En primer lugar, antes de que yo estaba recibiendo el error de importación:

"Ningún módulo nombrado multiarray."

que estaba recibiendo un error como este:

": No se pudo crear /some/dir/.matplotlib; considerar el establecimiento de MPLCONFIGDIR a un directorio de escritura para los datos de configuración matplotlib"

Al añadir la carpeta pyshared a la variable PythonPath, este error desapareció y recibí el error de importación.

Así que aquí es como me fijo:

quitado la carpeta pyshared de la variable PYTHONPATH.

Antes de importar el módulo matplotlib, añadir estas líneas:

import os 
os.environ['HOME']='/some/writable/dir' 

A continuación, antes de matplotlib.pyplot importación o pylab, añadir estas líneas:

import matplotlib 
matplotlib.use('Agg') 
# 'Agg' or whatever your backend is. 

Esto está documentado here.

Eso es! Está trabajando en python2.5 para mí ahora. Pero creo que funcionará en 2.6 también.

+1

en un sistema de Linux os.environ ['MPLCONFIGDIR'] = '/ tmp' también funciona. – erikvw

1

En Win32 He resuelto un problema similar (no es capaz de cargar módulos pyd a través de ISAPI_WSGI (IIS)) mediante la degradación de py2.6.5 a py2.5. Parece que esto podría ser un error de Python que se ha reintroducido. Ver por ejemplo this discussion.

+0

Creo que tienes razón. Tengo todo funcionando en una máquina de Windows con Python 2.5. Sin embargo, Ubuntu viene con Python 2.6 y hace que sea muy difícil degradar a Python 2.5. Además de eso, no puedes instalar mod_python si tu versión actual de python es 2.5. –

Cuestiones relacionadas