2012-03-22 10 views
8

Sto utilizzando il server Linux per configurare un progetto django. Ho ricevuto questo errore: "Impossibile creare /var/www/.matplotlib; considerare l'impostazione di MPLCONFIGDIR in una directory scrivibile per i dati di configurazione matplotlib"Impostazione di Matplotlib MPLCONFIGDIR: considerare l'impostazione di MPLCONFIGDIR in una directory scrivibile per i dati di configurazione matplotlib

Quindi ho trovato $ MPLCONFIGDIR sono vuoti. Così mi sono messo in questo modo:

[email protected]:~$ export MPLCONFIGDIR=~/website/graph 
[email protected]:~$ echo $MPLCONFIGDIR 
/home/lab/website/graph 

Questo percorso è la directory dove voglio per memorizzare le immagini create da Matplotlib. Poi fatto che questa impostazione in linea di comando python:

>>> import matplotlib 
>>> import os 
>>> os.environ.get('MPLCONFIGDIR') 
'/home/lab/website/graph' 

MA, nel progetto django che viene distribuito in Apache con mod_wsgi, l'errore sopra esce ancora. Ho aggiunto le righe seguenti:

import os 
os.environ['MPLCONFIGDIR'] = "/home/lab/website/graph" 
print(os.environ.get('MPLCONFIGDIR')) 

Stampa "Nessuno"!

Qualcuno può aiutarmi?

Grazie.

+0

Aha, se solo sapessi cosa cercare quando ho avuto lo stesso problema con 'mapplotlib'. Ho fatto retrocedere il codice fino al punto in cui ho trovato 'configdir = os.environ.get ('MPLCONFIGDIR')'. Immagino che l'eccezione stacktrace non me ne abbia mai parlato. –

risposta

18

Impostare MPLCONFIGDIR nel codice prima di importare matplotlib. Assicurati che la directory abbia le autorizzazioni in modo che possa essere scritta dall'app.

import os 
os.environ['MPLCONFIGDIR'] = "/home/lab/website/graph" 
import matplotlib 

In alternativa, è possibile impostarlo su un tempfile.

import os  
import tempfile 
os.environ['MPLCONFIGDIR'] = tempfile.mkdtemp() 
import matplotlib 
+0

Grazie a @miguel per la modifica – Esteban

+0

Grazie. Questo era anche il nostro caso. – mirek

0

Per @Esteban faccio qualcosa di simile in moduli o script:

import os 

try: 
    import matplotlib 
except: 
    import tempfile 
    import atexit 
    import shutil 

    mpldir = tempfile.mkdtemp() 
    atexit.register(shutil.rmtree, mpldir) # rm directory on succ exit 

    os.environ['MPLCONFIGDIR'] = mpldir 

    import matplotlib 

In questo modo la directory temporanea viene rimossa in uscita.

Problemi correlati