matplotlib braucht Zeit beim Importieren


103

Ich habe gerade ein Upgrade auf die neueste stabile Version von matplotlib(1.5.1) durchgeführt und jedes Mal, wenn ich matplotlib importiere, erhalte ich folgende Meldung:

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

... die immer für ein paar Sekunden stehen bleibt.

Ist das das erwartete Verhalten? War es auch vorher dasselbe, aber nur ohne die gedruckte Nachricht?


32
relevant: github.com/matplotlib/matplotlib/pull/5640 . Der Vorschlag dort ist, den Inhalt von zu löschen ~/.cache/matplotlibund es erneut zu versuchen. Es kann ein Berechtigungsproblem sein - es sollte nicht jedes Mal diesen Cache
erstellen

Ich hatte die letzten Kommentare nicht gelesen. Vielen Dank!
Ricky Robinson

7
Das hat bei mir funktioniert. Unter Ubuntu 14.04.2 mit Python 2.7 habe ich alle Dateien in ~ / .cache / matplotlib / gelöscht. Zuerst dachte ich, dass es nicht funktioniert, weil ich danach die Warnung bekam. Aber nachdem die Cache-Dateien neu erstellt wurden, verschwand die Warnung. :)
Nancy Poekert

In einer mod_wsgi + apache httpd + centos-Kombination - wenn eine Anfrage vom Browser gesendet wird, wartet der httpd einfach darauf, dass der Schriftcache erstellt wird .... Er wartet mehr als 6 Minuten und geht weiter und weiter .... und wird nie abgeschlossen das Font-Update. Könnten Sie bitte vorschlagen, wie dies gelöst werden kann? Vielen Dank
Vinodh

Antworten:


116

Wie Tom im obigen Kommentar vorgeschlagen hat, löschen Sie die Dateien:

fontList.cache
fontList.py3k.cache 
tex.cache 

das Problem lösen. In meinem Fall waren die Dateien unter:

`~/.matplotlib`

BEARBEITET

Vor ein paar Tagen erschien die Nachricht erneut. Ich habe die Dateien an den oben genannten Orten ohne Erfolg gelöscht. Ich fand, dass, wie hier von T Mudau vorgeschlagen, es einen zusätzlichen Speicherort mit Text-Cache-Dateien gibt:~/.cache/fontconfig


6
Ich bin auf OSX El Capitan und dies löst das Problem nicht. Irgendwelche Gedanken?
mar tin

2
Auf El Capitan musste ich auch ~ / .cache / fontList oder ähnliches entfernen.
Erdnuss_Butter

29
mpl.get_cachedir()zeigt die Cache-Speicherort- Dokumente
Lenna

2
Ich bin auf OS X El Capitan und dies behebt das Problem.
Nr.

6
Beachten Sie, dass Sie nach dem Löschen dieser Dateien immer noch eine Warnung erhalten - beim nächsten Import von matplotlib. Danach bist du fertig.
Ohruunuruus

25

Bestätigter Hugos Ansatz funktioniert für Ubuntu 14.04 LTS / matplotlib 1.5.1:

  • ~ / .cache / matplotlib / fontList.cache gelöscht
  • Code ausgeführt, erneut wurde die Warnung ausgegeben (Annahme: Erstellt den Cache korrekt neu)
  • Code erneut ausgeführt, keine Warnung mehr (endlich)

12

Unter OSX Yosemite (Version 10.10.15) hat Folgendes für mich funktioniert:

  • Entfernen Sie auch die Cache-Dateien aus diesem Verzeichnis: ~ / .cache / fontconfig (gemäß Toms Vorschlag)
    rm -rvf ~/.cache/fontconfig/*
  • entfernte auch .cache-Dateien in ~ / .matplotlib (gemäß Hugos Vorschlag)
    rm -rvf ~/.matplotlib/*

Arbeitete für mich unter macOS X El Captain. Ich habe den Eindruck, dass dadurch auch andere Bibliotheken schneller geladen werden konnten.
SeF

arbeitete unter macOS 10.12. Beim zweiten Laden wird die Nachricht nicht mehr angezeigt.
Demis

9

Ich habe den Python-Code nur einmal mit sudo ausgeführt und die Warnung für mich behoben. Jetzt läuft es schneller. Laufen ohne Sudo gibt überhaupt keine Warnung.

Prost


Willkommen bei Stack Overflow! Während dies theoretisch die Frage beantworten kann, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Enamul Hassan

Ich verwende Jupyter Notebook unter Mac OS X El Capitan. Ich lief sudo jupyter notebookdann import matplotlib.pyplotin einem Notizbuch und es löste mein Problem.
Kungphil

Ich habe seit Monaten damit zu kämpfen und das hat es gelöst! Ich bin auf OS 10.9.5.
Tactopoda

1
Wenn Sie sich die akzeptierte Antwort ansehen, werden Sie feststellen, dass Sie das Problem nur durch Ändern des Benutzers gelöst haben. Da im Stammverzeichnis keine ~ / .matplotlib vorhanden ist, verschwindet das Problem.
Rsh

@Rsh Nein, die Antworten zur Verwendung von Root-Berechtigungen besagen, dass das einmalige Ausführen als root dazu führt, dass der Cache nicht erneut erstellt wird, wenn Sie danach als regulärer Benutzer ausgeführt werden. Jedenfalls hat das bei mir nicht funktioniert.
Sudo

3

Ich habe den Python-Code w ausgeführt. sudo und es hat es geheilt ... meine Vermutung war, dass es keine Erlaubnis gab, diese Tabelle zu schreiben ... viel Glück!


0

HI Sie müssen diese Datei finden: font_manager.py in meinem Fall: C: \ Users \ gustavo \ Anaconda3 \ Lib \ site-packages \ matplotlib \ font_manager.py

und FIND def win32InstalledFonts (Verzeichnis = Keine, fontext = 'ttf') und ersetzen durch:

def win32InstalledFonts (directory = None, fontext = 'ttf'): "" Suchen Sie im angegebenen Schriftartenverzeichnis nach Schriftarten oder verwenden Sie die Systemverzeichnisse, wenn keine angegeben sind. Eine Liste der TrueType-Schriftdateinamen wird standardmäßig zurückgegeben, oder AFM-Schriftarten, wenn 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

Dies funktionierte für mich unter Ubuntu 16.04 LST mit Python 3.5.2 | Anaconda 4.2.0 (64-Bit) . Ich habe alle Dateien in gelöscht ~/.cache/matplotlib/.

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

Zuerst dachte ich, es würde nicht funktionieren, weil ich danach die Warnung bekam. Aber nachdem die Cache-Dateien neu erstellt wurden, verschwand die Warnung. Schließen Sie also Ihre Datei und öffnen Sie sie erneut (erneut öffnen). Es wird keine Warnung angezeigt.


-1

Das hat bei mir funktioniert:

sudo apt-get install libfreetype6-dev libxft-dev
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.