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
这对我有用。在使用python 2.7的Ubuntu 14.04.2上,我删除了〜/ .cache / matplotlib /中的所有文件。起初我以为这没用,因为后来我得到了警告。但是在重建缓存文件后,警告消失了。:)
南希·珀克特

在mod_wsgi + apache httpd + centos组合中-从浏览器发送请求时,httpd只是在等待说正在构建字体缓存...。它等待6分钟以上,然后一直持续下去....从未完成字体更新。您能否提出解决方案的建议?谢谢
Vinodh '16

Answers:


116

正如汤姆在上面的评论中建议的,删除文件:

fontList.cache
fontList.py3k.cache 
tex.cache 

解决这个问题。就我而言,文件位于:

`~/.matplotlib`

已编辑

几天前,该消息再次出现,我删除了上述位置中的文件,但没有成功。我发现,建议在这里通过牛逼穆道有一个额外的位置信息与文本缓存文件是:~/.cache/fontconfig


6
我在OSX El Capitan上,这不能解决问题。有什么想法吗?
tin

2
在El Capitan上,我还必须删除〜/ .cache / fontList或类似文件。
花生酱

29
mpl.get_cachedir()将显示缓存位置文档
Lenna

2
我在OS X El Capitan上,这可以解决问题。

6
请注意,删除这些文件后,您仍然会再次收到警告-下次导入matplotlib。之后,您就可以开始了。
ohruunuruus

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上工作。在第二次加载时,不再收到该消息。
Demis

9

我只使用sudo运行了python代码一次,它为我解决了警告。现在它运行得更快。不使用sudo运行就不会发出任何警告。

干杯


欢迎使用Stack Overflow!尽管从理论上讲这可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。
Enamul Hassan

我在Mac OSX El Capitan上运行Jupyter笔记本。sudo jupyter notebook然后我import matplotlib.pyplot在笔记本上跑了,它解决了我的问题。
kungphil '16

我已经为此苦苦挣扎了几个月,这解决了!我在OS 10.9.5上。
Tactopoda '16

1
好吧,如果您看一下已接受的答案,您会发现您所做的一切就是通过更改用户解决了该问题,并且由于根主目录中没有〜/ .matplotlib,因此问题就消失了。
Rsh 2013年

@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

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.