2010-04-01 8 views
5

Tout fonctionne comme prévu sur le serveur de développement Django. Dans Apache, l'application django fonctionne également sauf lorsque matplotlib est utilisé. Voilà l'erreur que je reçois:Matplotlib et WSGI/mod_python ne fonctionnent pas sur 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 

À partir du shell python, les deux déclarations fonctionnent: numpy.core.multiarray d'importation et multiarray d'importation. Des idées? Merci

Comme je regarde les fichiers numpy, j'ai trouvé le module multi-array, qui a une extension de «so». Ma conjecture, est que mod_python ne lit pas ces fichiers.

+0

Qu'est-ce qui se passe si vous le faites "de typeinfo d'importation numpy.core.multiarray, ndarray, tableau, vide, DTYPE" du shell python? – Mark

+0

qui fonctionne bien. aucun message d'erreur. –

+0

Je semble avoir un problème similaire. Je cours py2.6, cherrypy, IIS, isapi_wsgi. Matplotlib fonctionne bien à partir du shell Python. Essayer de charger les modules pyd (par exemple matplotlib._path) échoue lorsqu'il est appelé par IIS. J'ai vérifié os.environ et sys.path. – e1i45

Répondre

8

Problème résolu. Voici ce que j'ai fait.

tout d'abord, avant que je recevais l'erreur d'importation:

"Aucun module nommé multiarray."

Je recevais une erreur comme ceci:

« : Impossible de créer /some/dir/.matplotlib, envisager la création MPLCONFIGDIR dans un répertoire pour les données inscriptible de configuration matplotlib »

En ajoutant le dossier pyshared à la variable PythonPath, cette erreur a disparu et j'ai eu l'erreur d'importation.

est donc ici comment je l'ai fixé:

Suppression du dossier pyshared de la variable PYTHONPATH.

Avant d'importer le module matplotlib, ajoutez ces lignes:

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

Ensuite, avant matplotlib.pyplot d'importation ou pylab, ajoutez ces lignes:

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

Ceci est documenté here.

Voilà! Cela fonctionne sur python2.5 pour moi maintenant. Mais je crois que ça marchera aussi sur 2.6.

+1

sur un système Linux os.environ ['MPLCONFIGDIR'] = '/ tmp' fonctionne également. – erikvw

1

Sur Win32 j'ai résolu un problème similaire (ne pas pouvoir charger les modules pyd via ISAPI_WSGI (IIS)) en déclassant de py2.6.5 en py2.5. Il semble que ce soit un bug Python qui a été réintroduit. Voir par exemple this discussion.

+0

Je pense que vous avez raison. J'ai tout travailler sur une machine windows avec python 2.5. Cependant, Ubuntu est livré avec python 2.6 et rend très difficile la rétrogradation vers python 2.5. En plus de cela, vous ne pouvez pas installer mod_python si votre version python actuelle est 2.5. –