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 /. Сначала я подумал, что это не сработало, потому что потом получил предупреждение. Но после того, как файлы кеша были перестроены, предупреждение исчезло. :)
Nancy Poekert
В комбинации mod_wsgi + apache httpd + centos - когда запрос отправляется из браузера, httpd просто ждет, сообщая, что создается кеш шрифтов ... Он ждет более 6 минут и продолжается и продолжается ... и никогда не завершается. обновление шрифта. Не могли бы вы подсказать, как это решить? Спасибо
Vinodh 09

Ответы:

116

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

fontList.cache
fontList.py3k.cache 
tex.cache 

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

`~/.matplotlib`

ИЗМЕНЕНО

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

Хьюго
источник
6
Я использую OSX El Capitan, и это не решает проблему. Есть предположения?
marin
2
На El Capitan мне также пришлось удалить ~ / .cache / fontList или аналогичный.
peanut_butter
29
mpl.get_cachedir()покажет местоположение кэша документы
Lenna
2
Я использую OS X El Capitan, и это решает проблему.
6
Обратите внимание, что после удаления этих файлов вы все равно получите предупреждение еще раз - при следующем импорте matplotlib. После этого все готово.
ohruunuruus 08
25

Подтвержденный подход Хьюго работает для Ubuntu 14.04 LTS / matplotlib 1.5.1:

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

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

  • удалите также файлы кеша из этого каталога: ~ / .cache / fontconfig (согласно предложению Тома)
    rm -rvf ~/.cache/fontconfig/*
  • также удалили файлы .cache в ~ / .matplotlib (согласно предложению Хьюго)
    rm -rvf ~/.matplotlib/*
грабитель
источник
У меня работал на macOS X El Captain. У меня сложилось впечатление, что это ускорило загрузку и других библиотек.
SeF
работал на macOS 10.12. При второй загрузке больше не получать сообщения.
Демис
9

Я запустил код python с помощью sudo только один раз, и это помогло мне устранить предупреждение. Теперь работает быстрее. Запуск без sudo вообще не дает предупреждений.

Ура

Awais
источник
Добро пожаловать в Stack Overflow! Хотя теоретически это может дать ответ на вопрос, было бы предпочтительнее включить сюда основные части ответа и предоставить ссылку для справки.
Энамул Хассан
Я использую ноутбук Jupyter на Mac OSX El Capitan. Я запустил sudo jupyter notebookтогда import matplotlib.pyplotв блокноте, и это решило мою проблему.
kungphil
Я боролся с этим в течение нескольких месяцев, и это решило это! Я на OS 10.9.5.
Tactopoda 01
1
Что ж, если вы посмотрите на принятый ответ, вы увидите, что все, что вы сделали, это то, что вы решили проблему, изменив пользователя, и, поскольку в корневом домашнем каталоге нет ~ / .matplotlib, проблема исчезает.
Rsh
@Rsh Нет, в ответах на использование прав root говорится, что запуск его один раз от имени root делает так, что он не создает кеш снова, если после этого вы запускаете его как обычный пользователь. Во всяком случае, у меня это не сработало.
sudo
3

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

Кошка
источник
0

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

и НАЙТИ def win32InstalledFonts (directory = None, fontext = 'ttf') и замените на:

def win32InstalledFonts (directory = 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
Gus Ch
источник
0

У меня это сработало на Ubuntu 16.04 LST с Python 3.5.2 | Anaconda 4.2.0 (64-разрядная) . Я удалил все файлы в ~/.cache/matplotlib/.

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

Сначала я подумал, что это не сработает, потому что потом получил предупреждение. Но после того, как файлы кеша были перестроены, предупреждение исчезло. Итак, закройте файл и снова откройте (снова откройте), предупреждения нет.

С. Теон
источник
-1

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

sudo apt-get install libfreetype6-dev libxft-dev
Микахвели
источник