web-dev-qa-db-fra.com

matplotlib prend du temps lors de son importation

Je viens de mettre à jour la dernière version stable de matplotlib (1.5.1) et chaque fois que j'importe matplotlib, le message suivant s'affiche:

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

... qui s'arrête toujours pendant quelques secondes.

Est-ce le comportement attendu? Était-ce la même chose avant, mais juste sans le message imprimé?

99
Ricky Robinson

Comme suggéré par Tom dans le commentaire ci-dessus, supprimer les fichiers: 

fontList.cache
fontList.py3k.cache 
tex.cache 

résoudre le problème. Dans mon cas, les fichiers se trouvaient sous:

`~/.matplotlib`

ÉDITÉ

Il y a quelques jours, le message est à nouveau apparu, j'ai supprimé les fichiers dans les emplacements mentionnés ci-dessus sans aucun succès. J'ai trouvé que comme suggéré ici par T Mudau il y a un emplacement supplémentaire avec les fichiers de cache de texte est: ~/.cache/fontconfig

112
Hugo

L’approche confirmée de Hugo fonctionne pour Ubuntu 14.04 LTS/matplotlib 1.5.1:

  • supprimé ~/.cache/matplotlib/fontList.cache
  • a lancé le code, l'avertissement a de nouveau été émis (hypothèse: reconstruit correctement le cache)
  • a relancé le code, plus d'avertissement (enfin)
24
Bill Gale

Sur OSX Yosemite (version 10.10.15), les éléments suivants ont fonctionné pour moi:

  • supprimez également les fichiers de cache de ce répertoire: ~/.cache/fontconfig (selon la suggestion de tom)
    rm -rvf ~/.cache/fontconfig/* 
  • également supprimé les fichiers .cache dans ~/.matplotlib (selon la suggestion de Hugo)
    rm -rvf ~/.matplotlib/*
12
robbbyr

J'ai exécuté le code python à l'aide de Sudo une seule fois, et cela a résolu l'avertissement. Maintenant, ça va plus vite. Courir sans Sudo ne donne aucun avertissement. 

À votre santé

8
Awais

J'ai couru le code python w. Sudo et ça a guéri ... je suppose qu'il n'y avait pas la permission d'écrire cette table ... bonne chance!

2
C a t

Cela a fonctionné pour moi sur Ubuntu 16.04 LST avec Python 3.5.2 | Anaconda 4.2.0 (64 bits) . J'ai supprimé tous les fichiers dans ~/.cache/matplotlib/.

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

Au début, je pensais que cela ne fonctionnerait pas, car j'ai reçu l'avertissement par la suite. Mais après que les fichiers de cache aient été reconstruits, l'avertissement a disparu. Alors, fermez votre fichier et rouvrez-le (il l'ouvre à nouveau), il ne contient aucun avertissement.

0
S. Theon

HI vous devez trouver ce fichier: font_manager.py dans mon cas: C:\Utilisateurs\gustavo\Anaconda3\Lib\site-packages\matplotlib\font_manager.py

et FIND def win32InstalledFonts (répertoire = Aucun, fontext = 'ttf') et remplacé par:

def win32InstalledFonts (répertoire = Aucun, fontext = 'ttf'): "" " Recherchez les polices dans le répertoire de polices spécifié ou utilisez les répertoires système Si aucune liste n'est fournie. Une liste des noms de polices TrueType Sont renvoyés par défaut, ou des polices 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
0
Gus Ch