matplotlib toma tiempo al ser importado

103

Acabo de actualizar a la última versión estable de matplotlib(1.5.1) y cada vez que importo matplotlib recibo este mensaje:

/usr/local/lib/python2.7/dist-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.
  warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')

... que siempre se para unos segundos.

Es este el comportamiento esperado? ¿Era lo mismo también antes, pero sin el mensaje impreso?

Ricky Robinson
fuente
32
relevante: github.com/matplotlib/matplotlib/pull/5640 . La sugerencia es eliminar el contenido de ~/.cache/matplotlibe intentarlo de nuevo. Puede ser un problema de permisos - No debería estar construyendo ese caché cada vez
tmdavison
No había leído los últimos comentarios. ¡Gracias!
Ricky Robinson
7
Esto funcionó para mí. En Ubuntu 14.04.2 con python 2.7, eliminé todos los archivos en ~ / .cache / matplotlib /. Al principio pensé que no funcionó porque recibí la advertencia después. Pero después de que se reconstruyeron los archivos de caché, la advertencia desapareció. :)
Nancy Poekert
En una combinación mod_wsgi + apache httpd + centos: cuando se envía una solicitud desde el navegador, httpd simplemente espera y dice que se está construyendo la caché de fuentes ... Espera más de 6 minutos y sigue y sigue ... y nunca se completa la actualización de la fuente. ¿Podría sugerir cómo solucionar esto? Gracias
Vinodh

Respuestas:

116

Como sugirió Tom en el comentario anterior, eliminando los archivos:

fontList.cache
fontList.py3k.cache 
tex.cache 

resolver el problema. En mi caso, los archivos estaban bajo:

`~/.matplotlib`

EDITADO

Hace un par de días apareció nuevamente el mensaje, eliminé los archivos en las ubicaciones mencionadas anteriormente sin ningún éxito. He descubierto que como se sugiere aquí por T Mudau hay un lugar adicional con los archivos de caché de texto es:~/.cache/fontconfig

Hugo
fuente
6
Estoy en OSX El Capitan y esto no resuelve el problema. ¿Alguna idea?
mar tin
2
En El Capitan también tuve que eliminar ~ / .cache / fontList o similar.
peanut_butter
29
mpl.get_cachedir()mostrará los documentos de
Lenna
2
Estoy en OS X El Capitan y esto resuelve el problema.
nos
6
Tenga en cuenta que después de eliminar estos archivos, seguirá recibiendo la advertencia una vez más, la próxima vez que importe matplotlib. Después de eso, estás listo.
ohruunuruus
25

El enfoque confirmado de Hugo funciona para Ubuntu 14.04 LTS / matplotlib 1.5.1:

  • eliminado ~ / .cache / matplotlib / fontList.cache
  • ejecutó el código, nuevamente se emitió la advertencia (suposición: está reconstruyendo el caché correctamente)
  • ejecutó el código de nuevo, no más advertencia (finalmente)
Bill Gale
fuente
12

En OSX Yosemite (versión 10.10.15), lo siguiente funcionó para mí:

  • elimine también los archivos de caché de este directorio: ~ / .cache / fontconfig (según la sugerencia de tom)
    rm -rvf ~/.cache/fontconfig/*
  • también eliminó los archivos .cache en ~ / .matplotlib (según la sugerencia de Hugo)
    rm -rvf ~/.matplotlib/*
robbbyr
fuente
Me funcionó en macOS X El Captain. Tengo la impresión de que también aceleró la carga de otras bibliotecas.
SeF
trabajó en macOS 10.12. En la segunda carga, ya no recibes el mensaje.
Demis
9

Ejecuté el código de Python usando sudo solo una vez, y resolvió la advertencia por mí. Ahora corre más rápido. Ejecutar sin sudo no da ninguna advertencia.

Salud

Awais
fuente
¡Bienvenido a Stack Overflow! Si bien esto teóricamente puede responder a la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace como referencia.
Enamul Hassan
Estoy ejecutando el portátil Jupyter en Mac OSX El Capitan. sudo jupyter notebookLuego corrí import matplotlib.pyploten un cuaderno y resolvió mi problema.
kungphil
¡He estado luchando con esto durante meses y esto lo resolvió! Estoy en OS 10.9.5.
Tactopoda
1
Bueno, si echa un vistazo a la respuesta aceptada, verá que todo lo que ha hecho es que ha resuelto el problema cambiando el usuario, y como no hay ~ / .matplotlib en el directorio raíz, el problema desaparece.
Rsh
@Rsh No, las respuestas que dicen usar permisos de root dicen que ejecutarlo una vez como root hace que no vuelva a construir el caché si lo ejecuta como un usuario normal después. De todos modos, esto no funcionó para mí.
sudo
3

Ejecuté el código de Python w. sudo y lo curó ... supongo que no había permiso para escribir esa tabla ... ¡buena suerte!

Gato
fuente
0

Hola, debes encontrar este archivo: font_manager.py en mi caso: C: \ Users \ gustavo \ Anaconda3 \ Lib \ site-packages \ matplotlib \ font_manager.py

y ENCONTRAR def win32InstalledFonts (directorio = Ninguno, fontext = 'ttf') y reemplazar por:

def win32InstalledFonts (directorio = Ninguno, fontext = 'ttf'): "" "Busque fuentes en el directorio de fuentes especificado, o use los directorios del sistema si no hay ninguno. Se devuelve una lista de nombres de archivo de fuentes TrueType por defecto, o fuentes AFM si fontext == 'afm'. "" "

from six.moves import winreg
if directory is None:
    directory = win32FontDirectory()

fontext = get_fontext_synonyms(fontext)

key, items = None, {}
for fontdir in MSFontDirectories:
    try:
        local = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, fontdir)
    except OSError:
        continue

    if not local:
        return list_fonts(directory, fontext)
    try:
        for j in range(winreg.QueryInfoKey(local)[1]):
            try:
                key, direc, any = winreg.EnumValue(local, j)
                if not is_string_like(direc):
                    continue
                if not os.path.dirname(direc):
                    direc = os.path.join(directory, direc)
                    direc = direc.split('\0', 1)[0]

                if os.path.splitext(direc)[1][1:] in fontext:
                    items[direc] = 1
            except EnvironmentError:
                continue
            except WindowsError:
                continue
            except MemoryError:
                continue
        return list(six.iterkeys(items))
    finally:
        winreg.CloseKey(local)
return None
Gus Ch
fuente
0

Esto funcionó para mí en Ubuntu 16.04 LST con Python 3.5.2 | Anaconda 4.2.0 (64 bits) . Eliminé todos los archivos en formato ~/.cache/matplotlib/.

sudo rm -r fontList.py3k.cache tex.cache 

Al principio pensé que no funcionaría, porque recibí la advertencia después. Pero después de que se reconstruyeron los archivos de caché, la advertencia desapareció. Por lo tanto, cierre su archivo y vuelva a abrirlo (vuelva a abrir), no tiene advertencia.

S. Theon
fuente
-1

Esto funcionó para mí:

sudo apt-get install libfreetype6-dev libxft-dev
mykahveli
fuente