2010-04-01 11 views
5

Tutto funziona come previsto sul server di sviluppo Django. In Apache, l'applicazione django funziona anche tranne quando viene utilizzato Matplotlib. Ecco l'errore che ottengo:Matplotlib e WSGI/mod_python non funzionano su 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 

Dalla shell pitone, entrambe le affermazioni funzionano: l'importazione e l'importazione numpy.core.multiarray multiarray. Qualche idea? Grazie

Mentre guardo i file numpy, ho trovato il modulo multiarray, che ha un'estensione di "così". La mia ipotesi, è che mod_python non sta leggendo questi file.

+0

Cosa succede se si esegue "da numpy.core.multiarray import typeinfo, ndarray, array, empty, dtype" dalla shell python? – Mark

+0

che funziona bene. nessun messaggio di errore. –

+0

Mi sembra di avere un problema simile. Sto eseguendo py2.6, cherrypy, IIS, isapi_wsgi. Matplotlib funziona bene dalla shell Python. Il tentativo di caricare i moduli pyd (ad esempio matplotlib._path) fallisce quando viene chiamato da IIS. Ho controllato os.environ e sys.path. – e1i45

risposta

8

Problema risolto. Ecco cosa ho fatto.

Prima di tutto, prima che mi è stato sempre l'errore di importazione:

"Nessun modulo chiamato multiarray."

stavo ottenendo un errore come questo:

": Impossibile creare /some/dir/.matplotlib; considerare la creazione MPLCONFIGDIR in una directory scrivibile per i dati di configurazione matplotlib"

Aggiungendo la cartella pyshared alla variabile PythonPath, questo errore è andato via e ho ricevuto l'errore di importazione.

Quindi, ecco come ho riparato:

rimosso la cartella di pyshared dalla variabile PYTHONPATH.

Prima di importare il modulo matplotlib, aggiungere queste righe:

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

successivo, prima di matplotlib.pyplot importazione o pylab, aggiungere queste righe:

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

Questo è documentato here.

Questo è! Ora sto lavorando su python2.5 per me. Ma credo che funzionerà anche su 2.6.

+1

su un sistema linux os.environ ['MPLCONFIGDIR'] = '/ tmp' funziona anche. – erikvw

1

Su Win32 ho risolto un problema simile (non essendo in grado di caricare moduli PYD attraverso ISAPI_WSGI (IIS)) di retrocessione dal py2.6.5 a py2.5. Sembra che questo potrebbe essere un bug Python che è stato reintrodotto. Vedi ad esempio this discussion.

+0

Penso che tu abbia ragione. Ho tutto su una macchina Windows con Python 2.5. Tuttavia, Ubuntu è dotato di Python 2.6 e rende molto difficile il downgrade a Python 2.5. Inoltre, non è possibile installare mod_python se la versione attuale di Python è 2.5. –

Problemi correlati