matplotlib zajmuje trochę czasu podczas importowania

103

Właśnie zaktualizowałem do najnowszej stabilnej wersji matplotlib(1.5.1) i za każdym razem, gdy importuję matplotlib, otrzymuję ten komunikat:

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

... który zawsze zatrzymuje się na kilka sekund.

Czy to jest oczekiwane zachowanie? Czy było tak samo wcześniej, ale tylko bez wydrukowanej wiadomości?

Ricky Robinson
źródło
32
odpowiednie: github.com/matplotlib/matplotlib/pull/5640 . Sugeruje, aby usunąć zawartość ~/.cache/matplotlibi spróbować ponownie. Może to być problem z uprawnieniami - nie powinno się tworzyć tej pamięci podręcznej za każdym razem
tmdavison
Nie czytałem ostatnich komentarzy. Dzięki!
Ricky Robinson
7
To zadziałało dla mnie. W Ubuntu 14.04.2 z Pythonem 2.7 usunąłem wszystkie pliki w ~ / .cache / matplotlib /. Na początku myślałem, że to nie zadziałało, ponieważ później dostałem ostrzeżenie. Ale po odbudowaniu plików pamięci podręcznej ostrzeżenie zniknęło. :)
Nancy Poekert
W kombinacji mod_wsgi + apache httpd + centos - kiedy żądanie jest wysyłane z przeglądarki, httpd po prostu czeka, mówiąc, że jest budowana pamięć podręczna czcionek .... Oczekuje dłużej niż 6 minut i działa dalej ... i nigdy się nie kończy aktualizacja czcionki. Czy mógłbyś zasugerować, jak rozwiązać ten problem? Dzięki
Vinodh

Odpowiedzi:

116

Jak zasugerował Tom w komentarzu powyżej, usuwanie plików:

fontList.cache
fontList.py3k.cache 
tex.cache 

Rozwiąż problem. W moim przypadku pliki były pod:

`~/.matplotlib`

EDYTOWANE

Kilka dni temu komunikat pojawił się ponownie, bez powodzenia usunąłem pliki w wyżej wymienionych lokalizacjach. Okazało się, że jak sugeruje tutaj przez T Mudau istnieje dodatkowa lokalizacja z plików pamięci podręcznej tekst jest:~/.cache/fontconfig

Hugo
źródło
6
Używam OSX El Capitan i to nie rozwiązuje problemu. jakieś pomysły?
marzec
2
Na El Capitan musiałem również usunąć ~ / .cache / fontList lub podobne.
peanut_butter
29
mpl.get_cachedir()pokaże dokumenty
Lenna
2
Używam systemu OS X El Capitan i to rozwiązuje problem.
nr
6
Pamiętaj, że po usunięciu tych plików nadal otrzymasz ostrzeżenie - przy następnym imporcie matplotlib. Po tym jesteś ustawiony.
ohruunuruus,
25

Potwierdzone podejście Hugo działa dla Ubuntu 14.04 LTS / matplotlib 1.5.1:

  • usunięte ~ / .cache / matplotlib / fontList.cache
  • uruchomiono kod, ponownie pojawiło się ostrzeżenie (założenie: poprawnie odbudowuje pamięć podręczną)
  • uruchomiłem kod ponownie, bez ostrzeżenia (w końcu)
Bill Gale
źródło
12

Na OSX Yosemite (wersja 10.10.15) działały u mnie:

  • usuń pliki pamięci podręcznej również z tego katalogu: ~ / .cache / fontconfig (zgodnie z sugestią Toma)
    rm -rvf ~/.cache/fontconfig/*
  • usunięto również pliki .cache w ~ / .matplotlib (zgodnie z sugestią Hugo)
    rm -rvf ~/.matplotlib/*
robbbyr
źródło
Pracował dla mnie na macOS X El Captain. Mam wrażenie, że przyspieszyło to ładowanie innych bibliotek.
SeF
działał na macOS 10.12. Przy drugim ładowaniu nie odbieraj już wiadomości.
Demis
9

Uruchomiłem kod Pythona za pomocą sudo tylko raz i rozwiązało to ostrzeżenie. Teraz działa szybciej. Bieganie bez sudo nie daje żadnego ostrzeżenia.

Twoje zdrowie

Awais
źródło
Witamy w Stack Overflow! Chociaż może to teoretycznie odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj zasadnicze części odpowiedzi i podać link do odniesienia.
Enamul Hassan
Używam notebooka Jupyter na Mac OSX El Capitan. Pobiegłem sudo jupyter notebookwtedy import matplotlib.pyplotw zeszycie i to rozwiązało mój problem.
kungphil
Walczę z tym od miesięcy i to rozwiązało problem! Jestem w systemie OS 10.9.5.
Tactopoda
1
Cóż, jeśli spojrzysz na zaakceptowaną odpowiedź, zobaczysz, że wszystko, co zrobiłeś, to to, że rozwiązałeś problem, zmieniając użytkownika, a ponieważ nie ma ~ / .matplotlib w głównym katalogu domowym, problem znika.
Rsh
@Rsh Nie, odpowiedzi mówiące o używaniu uprawnień roota mówią, że uruchomienie go raz jako root powoduje, że nie buduje pamięci podręcznej ponownie, jeśli uruchomisz później jako zwykły użytkownik. W każdym razie to mi się nie udało.
sudo
3

Uruchomiłem kod Pythona w. sudo i to wyleczyło ... przypuszczam, że nie było pozwolenia na napisanie tej tabeli ... powodzenia!

C w
źródło
0

Cześć, musisz znaleźć ten plik: font_manager.py w moim przypadku: C: \ Users \ gustavo \ Anaconda3 \ Lib \ site-packages \ matplotlib \ font_manager.py

i ZNAJDŹ def win32InstalledFonts (directory = None, fontext = 'ttf') i zamień na:

def win32InstalledFonts (directory = None, fontext = 'ttf'): "" "Wyszukaj czcionki w określonym katalogu czcionek lub użyj katalogów systemowych, jeśli nie podano. Domyślnie zwracana jest lista nazw plików czcionek TrueType lub czcionki AFM, jeśli 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
źródło
0

To działało dla mnie na Ubuntu 16.04 LST z Pythonem 3.5.2 | Anaconda 4.2.0 (64-bitowa) . Usunąłem wszystkie pliki w ~/.cache/matplotlib/.

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

Na początku myślałem, że to nie zadziała, ponieważ później dostałem ostrzeżenie. Ale po odbudowaniu plików pamięci podręcznej ostrzeżenie zniknęło. Więc zamknij plik i otwórz ponownie (otwórz ponownie), nie ma ostrzeżenia.

S. Theon
źródło
-1

To zadziałało dla mnie:

sudo apt-get install libfreetype6-dev libxft-dev
mykahveli
źródło