Matplotlib принимает время при импорте

Я только что обновил до последней стабильной версии 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.')

... который всегда останавливается на несколько секунд.

Является ли это ожидаемым поведением? Было ли это так же и раньше, но только без печатного сообщения?

Ответ 1

Как указано в комментарии выше, удалив файлы:

fontList.cache
fontList.py3k.cache 
tex.cache 

решить проблему. В моем случае файлы находились под:

`~/.matplotlib`

отредактированы

Несколько дней назад сообщение появилось снова, я удалил файлы в упомянутых выше местах без каких-либо успехов. Я нашел, что, как предложено здесь, T Mudau, дополнительное место с текстовыми файлами кеша: ~/.cache/fontconfig

Ответ 2

Подтвержден подход Hugo для Ubuntu 14.04 LTS/matplotlib 1.5.1:

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

Ответ 3

В OSX Yosemite (версия 10.10.15) для меня работало следующее:

  • удалите файлы кэша из этого каталога: ~/.cache/fontconfig (в соответствии с предложением tom)
  • также удалены файлы .cache в ~/.matplotlib(согласно предложению Хьюго)

Ответ 4

Я запускал код python, используя sudo только один раз, и он разрешил предупреждение для меня. Теперь он работает быстрее. Бег без sudo не дает никакого предупреждения.

Приветствия

Ответ 5

Я запустил код python w. sudo, и он вылечил его... я предполагал, что не было разрешения писать эту таблицу... удачи!

Ответ 6

HI вы должны найти этот файл: font_manager.py в моем случае: C:\Users\gustavo\Anaconda3\Lib\site-packages\matplotlib\font_manager.py

и FIND def win32InstalledFonts (directory = None, fontext = 'ttf') и заменить на:

def win32InstalledFonts (directory = None, fontext = 'ttf'):    ""   Поиск шрифтов в указанном каталоге шрифтов или использование   системных каталогов, если они не указаны. Список шрифтов TrueType   имена файлов возвращаются по умолчанию или AFM-шрифты, если fontext ==    "АФМ".    ""

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

Ответ 7

Это сработало для меня:

sudo apt-get install libfreetype6-dev libxft-dev