【问题标题】:matplotlib taking time when being importedmatplotlib 导入时需要时间
【发布时间】:2016-04-18 16:38:02
【问题描述】:

我刚刚升级到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.')

...总是停顿几秒钟。

这是预期的行为吗?之前是不是也一样,只是没有打印出来的信息?

【问题讨论】:

  • 相关:github.com/matplotlib/matplotlib/pull/5640。建议删除~/.cache/matplotlib 的内容,然后重试。这可能是权限问题 - 不应该每次都构建缓存
  • 我还没有阅读最新的 cmets。谢谢!
  • 这对我有用。在带有 python 2.7 的 Ubuntu 14.04.2 上,我删除了 ~/.cache/matplotlib/ 中的所有文件。起初我认为它不起作用,因为后来我收到了警告。但是在重建缓存文件后,警告就消失了。 :)
  • 在 mod_wsgi+apache httpd+centos 组合中 - 当从浏览器发送请求时,httpd 只是等待说正在构建字体缓存......它等待超过 6 分钟然后继续on....并且永远不会完成字体更新。你能建议如何解决这个问题吗?谢谢

标签: python matplotlib


【解决方案1】:

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

fontList.cache
fontList.py3k.cache 
tex.cache 

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

`~/.matplotlib`

已编辑

几天前再次出现该消息,我删除了上述位置的文件,但没有成功。我发现正如T Mudau 建议的here 所建议的那样,文本缓存文件的额外位置是:~/.cache/fontconfig

【讨论】:

  • 我在 OSX El Capitan 上,这并不能解决问题。有什么想法吗?
  • 在 El Capitan 上,我还必须删除 ~/.cache/fontList 或类似内容。
  • mpl.get_cachedir() 将显示缓存位置docs
  • 我在 OS X El Capitan 上,这解决了问题。
  • 请注意,删除这些文件后,您仍然会再次收到警告 - 下次导入 matplotlib 时。之后你就设置好了。
【解决方案2】:

确认 Hugo 的方法适用于 Ubuntu 14.04 LTS/matplotlib 1.5.1:

  • 已删除 ~/.cache/matplotlib/fontList.cache
  • 运行代码,再次发出警告(假设:正在正确重建缓存)
  • 再次运行代码,不再出现警告(终于)

【讨论】:

    【解决方案3】:

    在 OSX Yosemite(版本 10.10.15)上,以下对我有用:

    • 也从该目录中删除缓存文件:~/.cache/fontconfig(根据汤姆的建议)
      rm -rvf ~/.cache/fontconfig/*
    • 还删除了 ~/.matplotlib 中的 .cache 文件(根据 Hugo 的建议)
      rm -rvf ~/.matplotlib/*

    【讨论】:

    • 在 macOS X El Captain 上为我工作。我的印象是它也可以更快地加载其他库。
    • 在 macOS 10.12 上工作。在第二次加载时,不再收到消息。
    【解决方案4】:

    我只使用 sudo 运行了一次 python 代码,它为我解决了警告。 现在它跑得更快了。在没有 sudo 的情况下运行根本不会发出警告。

    干杯

    【讨论】:

    • 欢迎来到 Stack Overflow!虽然这在理论上可以回答这个问题,it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。
    • 我在 Mac OSX El Capitan 上运行 Jupyter 笔记本。我在笔记本上运行了sudo jupyter notebook 然后import matplotlib.pyplot,它解决了我的问题。
    • 几个月来我一直在努力解决这个问题!我在 OS 10.9.5 上。
    • 好吧,如果你看一下接受的答案,你会发现你所做的就是通过更改用户解决了问题,因为根目录中没有 ~/.matplotlib主目录问题消失了。
    • @Rsh 不,使用 root 权限的答案说,以 root 身份运行一次就可以了,因此如果您之后以普通用户身份运行,它就不会再次构建缓存。无论如何,这对我不起作用。
    【解决方案5】:

    我运行了 python 代码 w。 sudo 并且它治愈了它......我的猜测是没有权限写那个表......祝你好运!

    【讨论】:

      【解决方案6】:

      你必须找到这个文件: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 字体 '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
      

      【讨论】:

        【解决方案7】:

        这对我有用 16.04 LSTPython 3.5.2 | Anaconda 4.2.0(64 位)。我删除了~/.cache/matplotlib/中的所有文件。

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

        一开始我以为这行不通,因为后来我收到了警告。但是在重建缓存文件后,警告就消失了。所以,关闭你的文件,然后重新打开(再次打开),它没有任何警告。

        【讨论】:

          【解决方案8】:

          这对我有用:

          sudo apt-get install libfreetype6-dev libxft-dev
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-10-07
            • 2013-06-08
            • 2023-03-29
            • 1970-01-01
            • 2017-11-25
            相关资源
            最近更新 更多