インポート時に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、2016年

mod_wsgi + apache httpd + centosの組み合わせ-ブラウザからリクエストが送信されると、httpdは単にフォントキャッシュが構築されていることを通知するのを待ちます。フォントの更新。これを解決する方法を提案していただけませんか?ありがとう
Vinodh

回答:


116

上記のコメントでトムが提案したように、ファイルを削除します:

fontList.cache
fontList.py3k.cache 
tex.cache 

問題を解く。私の場合、ファイルは次の場所にありました:

`~/.matplotlib`

編集済み

数日前、メッセージが再び表示されたので、上記の場所にあるファイルを削除しましたが、成功しませんでした。T Mudauによってここで提案されているように、テキストキャッシュファイルが存在する追加の場所があることがわかりました。~/.cache/fontconfig


6
OSX El Capitanを使用していますが、これで問題が解決しません。何かご意見は?
2016

2
El Capitanでは、〜/ .cache / fontListなども削除する必要がありました。
peanut_butter 2016

29
mpl.get_cachedir()キャッシュの場所のドキュメント
Lenna

2
私はOS X El Capitanを使用しており、これで問題が解決します。
nos

6
これらのファイルを削除した後も、もう一度警告が表示されることに注意してください。次回、matplotlibをインポートしたときに警告が表示されます。その後、あなたは設定されました。
ohruunuruus 2016

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/*
  • 〜/ .matplotlibの.cacheファイルも削除しました(Hugoの提案に従って)
    rm -rvf ~/.matplotlib/*

macOS X El Captainで私のために働いた。他のライブラリの読み込みも速くなったようです。
SEF

macOS 10.12で動作しました。2回目の読み込みで、メッセージが表示されなくなりました。
デミス2018

9

sudoを使用してpythonコードを1回だけ実行したところ、警告が解決されました。今ではより速く実行されます。sudoなしで実行しても、警告はまったく出されません。

乾杯


Stack Overflowへようこそ!これは理論的には質問に答えることができますが、ここに答えの本質的な部分を含め、参照用のリンクを提供することが望ましいでしょう
Enamul Hassan

Mac OSX El CapitanでJupyter Notebookを実行しています。sudo jupyter notebookそれから私はimport matplotlib.pyplotノートブックで走った、そしてそれは私の問題を解決した。
kungphil 2016年

私は何ヶ月もこれに苦労してきました、そしてこれはそれを解決しました!OS 10.9.5を使用しています。
タクトポダ

1
まあ、受け入れられた答えを見てみると、ユーザーを変更することで問題を解決しただけで、ルートのホームディレクトリに〜/ .matplotlibがないため、問題は消えます。
Rsh

@Rshいいえ、ルート権限を使用するように言っている答えは、ルートとして1回実行するとそれが作成されるため、後で通常のユーザーとして実行した場合にキャッシュを再構築しないということです。とにかく、これは私にはうまくいきませんでした。
sudo 2017年

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フォントファイル名のリストが返されます。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

これは、Python 3.5.2を搭載したUbuntu 16.04 LSTで私にとってうまくいきました。Anaconda 4.2.0(64ビット)。のファイルをすべて削除しました~/.cache/matplotlib/

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

後で警告を受けたので、最初はうまくいかないと思いました。しかし、キャッシュファイルが再構築された後、警告は消えました。したがって、ファイルを閉じて、もう一度開く(もう一度開く)と、警告は表示されません。


-1

これは私のために働きました:

sudo apt-get install libfreetype6-dev libxft-dev
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.