matplotlib потребує часу при імпорті


103

Я щойно перейшов до останнього стабільного випуску matplotlib(1.5.1), і кожного разу, коли я імпортую matplotlib, я отримую це повідомлення:

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

... який завжди зупиняється на кілька секунд.

Це очікувана поведінка? Це було і раніше, але просто без друкованого повідомлення?


32
відповідно: github.com/matplotlib/matplotlib/pull/5640 . Пропонуємо видалити вміст ~/.cache/matplotlibі спробувати ще раз. Це може бути проблема з дозволом - не слід будувати цей кеш кожен раз
tmdavison

Я не читав останні коментарі. Дякую!
Рікі Робінсон

7
Це працювало для мене. На Ubuntu 14.04.2 з python 2.7 я видалив усі файли в ~ / .cache / matplotlib /. Спочатку я подумав, що це не працює, тому що я отримав попередження згодом. Але після відновлення файлів кешу попередження пройшло. :)
Ненсі Покеркер

У комбінації mod_wsgi + apache httpd + centos - коли запит надсилається з браузера, httpd просто чекає, що кеш шрифту будується .... Він чекає більше 6 хвилин і продовжується і продовжується .... і ніколи не завершується. оновлення шрифту. Скажіть, будь ласка, як це вирішити? Спасибі
Vinodh

Відповіді:


116

Як Том запропонував у коментарі вище, видалення файлів:

fontList.cache
fontList.py3k.cache 
tex.cache 

вирішити проблему. У моєму випадку файли були під:

`~/.matplotlib`

ВИДАЛЕНО

Пару днів тому повідомлення знову з’явилося, я видалив файли у вказаних вище місцях без жодного успіху. Я виявив , що , як запропоновано тут по Т Mudau є додаткове місце з файлами кеш тексту:~/.cache/fontconfig


6
Я на OSX El Capitan, і це не вирішує питання. Будь-які думки?
березень

2
В El Capitan мені також довелося видалити ~ / .cache / fontList або подібне.
peanut_butter

29
mpl.get_cachedir()покажуть документи про
Ленна

2
Я перебуваю на OS X El Capitan, і це вирішує проблему.
нос

6
Зауважте, що після видалення цих файлів ви все одно отримаєте попередження ще один раз - наступного разу, коли ви імпортуєте matplotlib. Після цього ви налаштовані.
ohruunuruus

25

Підтверджений підхід Hugo працює для Ubuntu 14.04 LTS / matplotlib 1.5.1:

  • видалено ~ / .cache / matplotlib / fontList.cache
  • запустив код, знову було видано попередження (припущення: це відновлення кешу правильно)
  • знову запустив код, більше немає попередження (нарешті)

12

На OSX Yosemite (версія 10.10.15) для мене працювало наступне:

  • також видаліть кеш-файли з цього каталогу: ~ / .cache / fontconfig (згідно з пропозицією Tom)
    rm -rvf ~/.cache/fontconfig/*
  • також видалено файли .cache у ~ / .matplotlib (відповідно до пропозиції Х'юго)
    rm -rvf ~/.matplotlib/*

Працював для мене на macOS X El Captain. У мене таке враження, що це швидше завантажувало й інші бібліотеки.
СеФ

працював на macOS 10.12. На другому завантаженні більше не отримуйте повідомлення.
Деміс

9

Я запустив код python за допомогою sudo лише один раз, і він вирішив попередження для мене. Тепер він працює швидше. Біг без судо взагалі не попереджує.

Ура


Ласкаво просимо до переповнення стека! Хоча це теоретично може відповісти на питання, бажано було б сюди включити істотні частини відповіді та надати посилання для довідки.
Енамул Хассан

Я запускаю ноутбук Юпітер на Mac OSX El Capitan. Я побіг sudo jupyter notebookтоді import matplotlib.pyplotв зошит, і це вирішило мою проблему.
kungphil

Я боровся з цим місяцями і це вирішило! Я в ОС 10.9.5.
Тактопода

1
Що ж, якщо ви подивитесь на прийняту відповідь, ви побачите, що все, що ви зробили, це те, що ви вирішили проблему, змінивши користувача, і оскільки в кореневому домашньому каталозі немає проблеми ~ / .matplotlib.
Rsh

@Rsh Ні, у відповідях про використання кореневих дозволів йдеться про те, що запускаючи його один раз як root, це робить його, щоб він не створював кеш знову, якщо після запуску як звичайного користувача. У всякому разі, це для мене не вийшло.
sudo

3

Я запустив пітон код w. Судо, і це вилікувало ... я здогадався, що не було дозволу писати цей стіл ... удачі!


0

HI Ви повинні знайти цей файл: font_manager.py в моєму випадку: C: \ Users \ gustavo \ Anaconda3 \ Lib \ site-пакети \ matplotlib \ font_manager.py

та ЗРОБИТИ def win32InstalledFonts (каталог = None, fontext = 'ttf') та замініть на:

def win32InstalledFonts (каталог = None, fontext = 'ttf'): "" "Шрифти шукайте у вказаному каталозі шрифтів або використовуйте системні каталоги, якщо такі не вказані. Список імен файлів шрифтів TrueType повертається за замовчуванням, або шрифти AFM, якщо 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

Це працювало для мене на Ubuntu 16.04 LST з Python 3.5.2 | Анаконда 4.2.0 (64-розрядна) . Я видалив усі файли в ~/.cache/matplotlib/.

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

Спочатку я подумав, що це не вийде, тому що після цього я отримав попередження. Але після відновлення файлів кешу попередження пройшло. Отже, закрийте файл і відкрийте його знову (відкрийте знову), воно не має попередження.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.