matplotlib prend du temps lors de l'importation

103

Je viens de passer à la dernière version stable de matplotlib(1.5.1) et chaque fois que j'importe matplotlib, je reçois ce message:

/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 bloque toujours pendant quelques secondes.

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

Ricky Robinson
la source
32
pertinent: github.com/matplotlib/matplotlib/pull/5640 . Il est suggéré de supprimer le contenu de ~/.cache/matplotlibet de réessayer. Cela peut être un problème d'autorisations - Il ne devrait pas être construit ce cache à chaque fois
tmdavison
Je n'avais pas lu les derniers commentaires. Merci!
Ricky Robinson le
7
Cela a fonctionné pour moi. Sur Ubuntu 14.04.2 avec python 2.7, j'ai supprimé tous les fichiers dans ~ / .cache / matplotlib /. Au début, je pensais que cela ne fonctionnait pas parce que j'ai reçu l'avertissement par la suite. Mais après la reconstruction des fichiers de cache, l'avertissement a disparu. :)
Nancy Poekert
Dans une combinaison mod_wsgi + apache httpd + centos - lorsqu'une requête est envoyée depuis le navigateur, le httpd attend simplement en disant que le cache de polices est en cours de construction .... Il attend plus de 6 minutes et continue encore et encore .... et ne se termine jamais la mise à jour de la police. Pourriez-vous s'il vous plaît suggérer comment résoudre ce problème? Merci
Vinodh

Réponses:

116

Comme Tom l'a suggéré dans le commentaire ci-dessus, en supprimant les fichiers:

fontList.cache
fontList.py3k.cache 
tex.cache 

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

`~/.matplotlib`

ÉDITÉ

Il y a quelques jours, le message est ré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:~/.cache/fontconfig

Hugo
la source
6
Je suis sur OSX El Capitan et cela ne résout pas le problème. Des pensées?
étain mar
2
Sur El Capitan, j'ai également dû supprimer ~ / .cache / fontList ou similaire.
peanut_butter
29
mpl.get_cachedir()affichera l'emplacement du cache docs
Lenna
2
Je suis sur OS X El Capitan et cela résout le problème.
nos
6
Notez qu'après la suppression de ces fichiers, vous recevrez toujours l'avertissement une fois de plus - la prochaine fois que vous importerez matplotlib. Après cela, vous êtes prêt.
ohruunuruus
25

L'approche confirmée d'Hugo fonctionne pour Ubuntu 14.04 LTS / matplotlib 1.5.1:

  • supprimé ~ / .cache / matplotlib / fontList.cache
  • a exécuté le code, encore une fois l'avertissement a été émis (hypothèse: est en train de reconstruire le cache correctement)
  • a exécuté à nouveau le code, plus d'avertissement (enfin)
Bill Gale
la source
12

Sur OSX Yosemite (version 10.10.15), ce qui suit a 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/*
robbbyr
la source
A travaillé pour moi sur macOS X El Captain. J'ai l'impression que cela a également accéléré le chargement d'autres bibliothèques.
SeF
travaillé sur macOS 10.12. Au 2ème chargement, ne recevez plus le message.
Demis
9

J'ai exécuté le code python en utilisant sudo une seule fois et cela a résolu l'avertissement pour moi. Maintenant, il fonctionne plus vite. L'exécution sans sudo ne donne aucun avertissement.

À votre santé

Awais
la source
Bienvenue dans Stack Overflow! Bien que cela puisse théoriquement répondre à la question, il serait préférable d'inclure ici les parties essentielles de la réponse et de fournir le lien pour référence.
Enamul Hassan
J'utilise le notebook Jupyter sur Mac OSX El Capitan. J'ai sudo jupyter notebookensuite couru import matplotlib.pyplotdans un cahier et cela a résolu mon problème.
kungphil
Cela fait des mois que je lutte avec ça et cela l'a résolu! Je suis sous OS 10.9.5.
Tactopoda
1
Eh bien, si vous regardez la réponse acceptée, vous verrez que tout ce que vous avez fait est que vous avez résolu le problème en changeant d'utilisateur, et comme il n'y a pas de problème ~ / .matplotlib dans le répertoire racine racine disparaît.
Rsh le
@Rsh Non, les réponses disant qu'il faut utiliser les autorisations root disent que l'exécuter une fois en tant que root permet de ne pas créer à nouveau le cache si vous l'exécutez en tant qu'utilisateur régulier par la suite. Quoi qu'il en soit, cela n'a pas fonctionné pour moi.
sudo
3

J'ai exécuté le code python w. sudo et ça l'a guéri ... je suppose qu'il n'y avait pas la permission d'écrire ce tableau ... bonne chance!

Chat
la source
0

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

et TROUVEZ def win32InstalledFonts (directory = None, fontext = 'ttf') et remplacez par:

def win32InstalledFonts (directory = None, fontext = 'ttf'): "" "Recherchez les polices dans le répertoire de polices spécifié, ou utilisez les répertoires système si aucun n'est indiqué. Une liste de noms de fichiers de polices TrueType est renvoyée par défaut, ou les 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
Gus Ch
la source
0

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, j'ai pensé que cela ne fonctionnerait pas, parce que j'ai reçu l'avertissement par la suite. Mais après la reconstruction des fichiers de cache, l'avertissement a disparu. Alors, fermez votre fichier et rouvrez-le (ouvrez à nouveau), il n'a aucun avertissement.

S. Theon
la source
-1

Cela a fonctionné pour moi:

sudo apt-get install libfreetype6-dev libxft-dev
mykahveli
la source