2012-03-22 14 views
8

Estoy usando un servidor Linux para configurar un proyecto django. Tengo este error: "No se pudo crear /var/www/.matplotlib; considerar el establecimiento de MPLCONFIGDIR a un directorio de escritura para los datos de configuración matplotlib"Configuración de Matplotlib MPLCONFIGDIR: considere configurar MPLCONFIGDIR en un directorio grabable para los datos de configuración de matplotlib

Entonces me encontré con $ MPLCONFIGDIR están vacíos. Así que lo configuré así:

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

Esta ruta es el directorio donde quiero almacenar las imágenes creadas por Matplotlib. Entonces se aseguró este ajuste en la línea de comandos de Python:

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

PERO, en el proyecto de Django que se despliega en Apache con mod_wsgi, el error anteriormente mencionado todavía existe. Agregué las siguientes líneas:

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

¡Imprime "Ninguno"!

¿Alguien me puede ayudar?

Gracias.

+0

Aha, si supiera qué buscar cuando tengo el mismo problema con 'mapplotlib'. Retrocedí el código hasta el punto donde encontré 'configdir = os.environ.get ('MPLCONFIGDIR')'. Supongo que la pila de pila de excepción nunca me lo contó. –

Respuesta

18

Configure el código de MPLCONFIGDIR antes de importar matplotlib. Asegúrese de que el directorio tenga permisos para que la aplicación pueda escribir en él.

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

Alternativamente, podría establecerlo en un archivo de temp.

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

Gracias @miguel por la edición – Esteban

+0

Gracias. Este también fue nuestro caso. – mirek

0

por @Esteban que hacer algo como esto en módulos o secuencias de comandos:

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 

De esta manera el directorio temporal se elimina al salir.

Cuestiones relacionadas