matplotlib demorando ao ser importado

103

Acabei de atualizar para a versão estável mais recente matplotlib(1.5.1) e sempre que importo matplotlib recebo esta mensagem:

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

... que sempre para por alguns segundos.

Este é o comportamento esperado? Foi o mesmo antes, mas apenas sem a mensagem impressa?

Ricky Robinson
fonte
32
relevante: github.com/matplotlib/matplotlib/pull/5640 . A sugestão é excluir o conteúdo de ~/.cache/matplotlibe tentar novamente. Pode ser um problema de permissão - Não deveria estar criando esse cache todas as vezes
tmdavison
Eu não tinha lido os comentários mais recentes. Obrigado!
Ricky Robinson
7
Isso funcionou para mim. No Ubuntu 14.04.2 com python 2.7, apaguei todos os arquivos em ~ / .cache / matplotlib /. A princípio pensei que não funcionava porque recebi o aviso depois. Mas depois que os arquivos de cache foram reconstruídos, o aviso desapareceu. :)
Nancy Poekert
Em uma combinação mod_wsgi + apache httpd + centos - quando uma requisição é enviada do navegador o httpd simplesmente espera para dizer que o cache de fontes está sendo construído .... Ele espera mais de 6 minutos e continua .... e nunca termina a atualização da fonte. Você poderia sugerir como resolver isso? Obrigado
Vinodh

Respostas:

116

Como Tom sugeriu no comentário acima, excluindo os arquivos:

fontList.cache
fontList.py3k.cache 
tex.cache 

resolva o problema. No meu caso, os arquivos estavam em:

`~/.matplotlib`

EDITADO

Alguns dias atrás a mensagem apareceu novamente, eu apaguei os arquivos nos locais mencionados acima sem sucesso. Descobri que, conforme sugerido aqui por T Mudau, há um local extra com arquivos de cache de texto:~/.cache/fontconfig

Hugo
fonte
6
Estou no OSX El Capitan e isso não resolve o problema. Alguma ideia?
março de
2
No El Capitan, também tive que remover ~ / .cache / fontList ou similar.
peanut_butter
29
mpl.get_cachedir()mostrará os documentos de
Lenna
2
Estou no OS X El Capitan e isso resolve o problema.
nos
6
Observe que depois de excluir esses arquivos, você ainda receberá o aviso mais uma vez - na próxima vez que importar matplotlib. Depois disso, você está pronto.
ohruunuruus
25

A abordagem de Hugo confirmada funciona para Ubuntu 14.04 LTS / matplotlib 1.5.1:

  • excluído ~ / .cache / matplotlib / fontList.cache
  • executou o código, novamente o aviso foi emitido (suposição: está reconstruindo o cache corretamente)
  • executou o código novamente, sem mais avisos (finalmente)
Bill Gale
fonte
12

No OSX Yosemite (versão 10.10.15), o seguinte funcionou para mim:

  • remova os arquivos de cache deste diretório também: ~ / .cache / fontconfig (conforme sugestão de tom)
    rm -rvf ~/.cache/fontconfig/*
  • também removeu arquivos .cache em ~ / .matplotlib (conforme sugestão de Hugo)
    rm -rvf ~/.matplotlib/*
robbbyr
fonte
Trabalhou para mim no macOS X El Captain. Tenho a impressão de que também ficou mais rápido o carregamento de outras bibliotecas.
SEF
trabalhou no macOS 10.12. No segundo carregamento, não receba mais a mensagem.
Demis
9

Executei o código python usando sudo apenas uma vez e ele resolveu o aviso para mim. Agora funciona mais rápido. Executar sem sudo não dá nenhum aviso.

Felicidades

Awais
fonte
Bem-vindo ao Stack Overflow! Embora isso possa teoricamente responder à pergunta, seria preferível incluir as partes essenciais da resposta aqui e fornecer o link para referência.
Enamul Hassan
Estou executando o notebook Jupyter no Mac OSX El Capitan. Corri sudo jupyter notebookentão import matplotlib.pyplotem um notebook e resolveu meu problema.
kungphil de
Venho lutando com isso há meses e isso resolveu! Estou no OS 10.9.5.
Tactopoda 01 de
1
Bem, se você der uma olhada na resposta aceita, verá que tudo o que fez foi resolver o problema mudando o usuário e, como não há ~ / .matplotlib no diretório raiz, o problema desaparece.
Rsh
@Rsh Não, as respostas dizendo para usar permissões de root dizem que rodá-lo uma vez como root faz com que ele não construa o cache novamente se você rodar como um usuário regular depois. De qualquer forma, isso não funcionou para mim.
sudo
3

Eu executei o código python w. sudo e curou ... meu palpite era que não havia permissão para escrever aquela tabela ... boa sorte!

Gato
fonte
0

HI você deve encontrar este arquivo: font_manager.py no meu caso: C: \ Users \ gustavo \ Anaconda3 \ Lib \ site-packages \ matplotlib \ font_manager.py

e ENCONTRAR def win32InstalledFonts (diretório = Nenhum, fontext = 'ttf') e substituir por:

def win32InstalledFonts (directory = None, fontext = 'ttf'): "" "Pesquise fontes no diretório de fontes especificado ou use os diretórios do sistema se nenhum for fornecido. Uma lista de nomes de arquivos de fontes TrueType é retornada por padrão, ou fontes AFM se 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
fonte
0

Isso funcionou para mim no Ubuntu 16.04 LST com Python 3.5.2 | Anaconda 4.2.0 (64 bits) . Excluí todos os arquivos em ~/.cache/matplotlib/.

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

A princípio pensei que não funcionaria, porque recebi o aviso depois. Mas depois que os arquivos de cache foram reconstruídos, o aviso desapareceu. Portanto, feche seu arquivo e abra novamente (abra novamente), ele não tem nenhum aviso.

S. Theon
fonte
-1

Isso funcionou para mim:

sudo apt-get install libfreetype6-dev libxft-dev
mykahveli
fonte