matplotlib richiede tempo durante l'importazione


103

Ho appena effettuato l'aggiornamento all'ultima versione stabile di matplotlib(1.5.1) e ogni volta che importa matplotlib ricevo questo messaggio:

/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.')

... che si ferma sempre per pochi secondi.

È questo il comportamento previsto? Era lo stesso anche prima, ma solo senza il messaggio stampato?


32
pertinente: github.com/matplotlib/matplotlib/pull/5640 . Il suggerimento è quello di cancellare il contenuto di ~/.cache/matplotlibe riprovare. Potrebbe essere un problema di autorizzazioni - Non dovrebbe costruire quella cache ogni volta
tmdavison

Non avevo letto gli ultimi commenti. Grazie!
Ricky Robinson

7
Questo ha funzionato per me. Su Ubuntu 14.04.2 con python 2.7 ho cancellato tutti i file in ~ / .cache / matplotlib /. All'inizio ho pensato che non funzionasse perché in seguito ho ricevuto l'avvertimento. Ma dopo che i file della cache sono stati ricostruiti, l'avviso è scomparso. :)
Nancy Poekert

In una combinazione mod_wsgi + apache httpd + centos - quando una richiesta viene inviata dal browser, httpd aspetta semplicemente di dire che la cache dei font è in fase di costruzione .... Aspetta per più di 6 minuti e va avanti e avanti .... e non viene mai completata l'aggiornamento del carattere. Potresti suggerire come risolverlo? Grazie
Vinodh

Risposte:


116

Come suggerito da Tom nel commento sopra, eliminando i file:

fontList.cache
fontList.py3k.cache 
tex.cache 

risolvere il problema. Nel mio caso i file erano sotto:

`~/.matplotlib`

MODIFICATO

Un paio di giorni fa il messaggio è apparso di nuovo, ho cancellato i file nelle posizioni sopra menzionate senza alcun successo. Ho scoperto che, come suggerito qui da T Mudau, c'è una posizione in più con i file della cache di testo:~/.cache/fontconfig


6
Sono su OSX El Capitan e questo non risolve il problema. qualche idea?
mar tin

2
Su El Capitan ho anche dovuto rimuovere ~ / .cache / fontList o simili.
peanut_butter

29
mpl.get_cachedir()mostrerà i documenti sulla
Lenna

2
Sono su OS X El Capitan e questo risolve il problema.
n.

6
Nota che dopo aver eliminato questi file riceverai comunque l'avviso ancora una volta, la prossima volta che importi matplotlib. Dopo di che sei pronto.
ohruunuruus

25

Confermato che l'approccio di Hugo funziona per Ubuntu 14.04 LTS / matplotlib 1.5.1:

  • eliminato ~ / .cache / matplotlib / fontList.cache
  • codice eseguito, di nuovo è stato emesso l'avviso (presupposto: sta ricostruendo correttamente la cache)
  • ha eseguito di nuovo il codice, non più avvisi (finalmente)

12

Su OSX Yosemite (versione 10.10.15), per me ha funzionato quanto segue:

  • rimuovi anche i file di cache da questa directory: ~ / .cache / fontconfig (come da suggerimento di tom)
    rm -rvf ~/.cache/fontconfig/*
  • rimosso anche i file .cache in ~ / .matplotlib (secondo il suggerimento di Hugo)
    rm -rvf ~/.matplotlib/*

Ha funzionato per me su macOS X El Captain. Ho l'impressione che abbia reso più veloce il caricamento anche di altre librerie.
SeF

ha funzionato su macOS 10.12. Al 2 ° caricamento, non ricevi più il messaggio.
Demis

9

Ho eseguito il codice Python usando sudo solo una volta e ha risolto l'avviso per me. Ora funziona più velocemente. L'esecuzione senza sudo non dà alcun avviso.

Saluti


Benvenuto in Stack Overflow! Sebbene questo possa teoricamente rispondere alla domanda, sarebbe preferibile includere qui le parti essenziali della risposta e fornire il collegamento per riferimento.
Enamul Hassan

Sto eseguendo il notebook Jupyter su Mac OSX El Capitan. sudo jupyter notebookAllora ho eseguito import matplotlib.pyplotin un notebook e ha risolto il mio problema.
kungphil

Ho lottato con questo per mesi e questo lo ha risolto! Sono su OS 10.9.5.
Tactopoda

1
Bene, se dai un'occhiata alla risposta accettata, vedrai che tutto ciò che hai fatto è che hai risolto il problema cambiando utente, e poiché non c'è ~ / .matplotlib nella home directory di root il problema svanisce.
Rsh

@Rsh No, le risposte che dicono di usare i permessi di root dicono che eseguirlo una volta come root lo fa in modo che non ricostruisca di nuovo la cache se esegui come utente normale dopo. Comunque, questo non ha funzionato per me.
sudo

3

Ho eseguito il codice python w. sudo e lo ha curato ... la mia ipotesi era che non ci fosse il permesso di scrivere quella tabella ... buona fortuna!


0

Ciao devi trovare questo file: font_manager.py nel mio caso: C: \ Users \ gustavo \ Anaconda3 \ Lib \ site-packages \ matplotlib \ font_manager.py

e FIND def win32InstalledFonts (directory = None, fontext = 'ttf') e sostituisci con:

def win32InstalledFonts (directory = None, fontext = 'ttf'): "" "Cerca i caratteri nella directory dei caratteri specificata, o usa le directory di sistema se non ne sono fornite. Viene restituito un elenco di nomi di file di caratteri TrueType, o caratteri AFM se 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

0

Questo ha funzionato per me su Ubuntu 16.04 LST con Python 3.5.2 | Anaconda 4.2.0 (64 bit) . Ho eliminato tutti i file in formato ~/.cache/matplotlib/.

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

All'inizio ho pensato che non avrebbe funzionato, perché in seguito ho ricevuto l'avvertimento. Ma dopo che i file della cache sono stati ricostruiti, l'avviso è scomparso. Quindi, chiudi il tuo file e riaprilo di nuovo (aprilo di nuovo), non ha alcun avviso.


-1

Questo ha funzionato per me:

sudo apt-get install libfreetype6-dev libxft-dev
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.