matplotlib membutuhkan waktu saat diimpor


103

Saya baru saja memutakhirkan ke rilis stabil terbaru matplotlib(1.5.1) dan setiap kali saya mengimpor matplotlib, saya mendapatkan pesan ini:

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

... yang selalu terhenti selama beberapa detik.

Apakah ini perilaku yang diharapkan? Apakah sebelumnya sama, tetapi hanya tanpa pesan yang dicetak?


32
relevan: github.com/matplotlib/matplotlib/pull/5640 . Ada saran untuk menghapus konten ~/.cache/matplotlibdan coba lagi. Ini mungkin masalah izin - Seharusnya tidak membangun cache itu setiap saat
tmdavison

Saya belum membaca komentar terbaru. Terima kasih!
Ricky Robinson

7
Ini berhasil untuk saya. Di Ubuntu 14.04.2 dengan python 2.7 saya menghapus semua file di ~ / .cache / matplotlib /. Awalnya saya pikir itu tidak berhasil karena saya mendapat peringatan sesudahnya. Tetapi setelah file cache dibangun kembali, peringatan itu hilang. :)
Nancy Poekert

Dalam kombinasi mod_wsgi + apache httpd + centos - ketika permintaan dikirim dari browser, httpd hanya menunggu mengatakan cache font sedang dibangun .... Ini menunggu lebih dari 6 menit dan terus berjalan .... dan tidak pernah selesai pembaruan font. Bisakah Anda menyarankan cara mengatasi ini? Terima kasih
Vinodh

Jawaban:


116

Seperti yang disarankan tom dalam komentar di atas, menghapus file:

fontList.cache
fontList.py3k.cache 
tex.cache 

menyelesaikan masalah. Dalam kasus saya, file tersebut berada di bawah:

`~/.matplotlib`

DIEDIT

Beberapa hari yang lalu pesan muncul lagi, saya menghapus file di lokasi yang disebutkan di atas tanpa hasil. Saya menemukan bahwa seperti yang disarankan di sini oleh T Mudau, ada lokasi tambahan dengan file cache teks adalah:~/.cache/fontconfig


6
Saya menggunakan OSX El Capitan dan ini tidak menyelesaikan masalah. Ada pemikiran?
mar tin

2
Di El Capitan saya juga harus menghapus ~ / .cache / fontList atau serupa.
peanut_butter

29
mpl.get_cachedir()akan menampilkan dokumen
Lenna

2
Saya menggunakan OS X El Capitan dan ini menyelesaikan masalah.
no

6
Perhatikan bahwa setelah menghapus file-file ini, Anda masih akan mendapatkan peringatan sekali lagi - kali berikutnya Anda mengimpor matplotlib. Setelah itu Anda sudah siap.
ohruunuruus

25

Pendekatan Hugo yang dikonfirmasi berfungsi untuk Ubuntu 14.04 LTS / matplotlib 1.5.1:

  • dihapus ~ / .cache / matplotlib / fontList.cache
  • menjalankan kode, sekali lagi peringatan dikeluarkan (asumsi: sedang membangun kembali cache dengan benar)
  • jalankan kode lagi, tidak ada peringatan lagi (akhirnya)

12

Di OSX Yosemite (versi 10.10.15), berikut ini berfungsi untuk saya:

  • hapus file cache dari direktori ini juga: ~ / .cache / fontconfig (sesuai saran tom)
    rm -rvf ~/.cache/fontconfig/*
  • juga menghapus file .cache di ~ / .matplotlib (sesuai saran Hugo)
    rm -rvf ~/.matplotlib/*

Bekerja untuk saya di macOS X El Captain. Saya mendapat kesan bahwa itu membuat lebih cepat memuat perpustakaan lain juga.
SeF

bekerja di macOS 10.12. Pada pemuatan ke-2, jangan terima pesannya lagi.
Demis

9

Saya menjalankan kode python menggunakan sudo hanya sekali, dan itu menyelesaikan peringatan untuk saya. Sekarang ini berjalan lebih cepat. Berjalan tanpa sudo tidak memberikan peringatan sama sekali.

Bersulang


Selamat datang di Stack Overflow! Meskipun ini secara teoritis dapat menjawab pertanyaan, akan lebih baik jika menyertakan bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
Enamul Hassan

Saya menjalankan notebook Jupyter di Mac OSX El Capitan. Saya sudo jupyter notebookkemudian berlari import matplotlib.pyplotdi buku catatan dan itu memecahkan masalah saya.
kungphil

Saya telah berjuang dengan ini selama berbulan-bulan dan ini menyelesaikannya! Saya menggunakan OS 10.9.5.
Tactopoda

1
Nah, jika Anda melihat jawaban yang diterima, Anda akan melihat semua yang telah Anda lakukan adalah bahwa Anda telah menyelesaikan masalah dengan mengubah pengguna, dan karena tidak ada ~ / .matplotlib di root direktori home masalah hilang.
Rsh

@Rsh Tidak, jawaban yang mengatakan untuk menggunakan izin root mengatakan bahwa menjalankannya sekali sebagai root membuatnya jadi tidak membangun cache lagi jika Anda menjalankannya sebagai pengguna biasa setelahnya. Bagaimanapun, ini tidak berhasil untuk saya.
sudo

3

Saya menjalankan kode python w. sudo dan itu menyembuhkannya ... tebakanku adalah tidak ada izin untuk menulis tabel itu ... semoga berhasil!


0

HI Anda harus menemukan file ini: font_manager.py dalam kasus saya: C: \ Users \ gustavo \ Anaconda3 \ Lib \ site-packages \ matplotlib \ font_manager.py

dan TEMUKAN def win32InstalledFonts (directory = None, fontext = 'ttf') dan ganti dengan:

def win32InstalledFonts (directory = None, fontext = 'ttf'): "" "Cari fonta di direktori font yang ditentukan, atau gunakan direktori sistem jika tidak ada yang diberikan. Daftar nama file font TrueType dikembalikan secara default, atau font AFM jika 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

Ini bekerja untuk saya di Ubuntu 16.04 LST dengan Python 3.5.2 | Anaconda 4.2.0 (64-bit) . Saya menghapus semua file di ~/.cache/matplotlib/.

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

Awalnya saya pikir itu tidak akan berhasil, karena saya mendapat peringatan sesudahnya. Tetapi setelah file cache dibangun kembali, peringatan itu hilang. Jadi, tutup file Anda, dan buka kembali (buka lagi), tidak ada peringatan.


-1

Ini berhasil untuk saya:

sudo apt-get install libfreetype6-dev libxft-dev
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.