Matplotlib afm导入极其缓慢

17

导入时间过长:

  from matplotlib import pylab as plt --> 3.0124739 secs

这是cProfile的输出,清晰地显示了问题出现在afm.py上,它是Adobe字体度量标准的某个接口。Matplotlib版本为1.4.0- Ubuntu 14.04。

         5994612 function calls (5992123 primitive calls) in 4.702 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
      182    1.589    0.009    2.372    0.013 afm.py:220(_parse_kern_pairs)
      215    0.746    0.003    1.420    0.007 afm.py:180(_parse_char_metrics)
  1297990    0.410    0.000    0.410    0.000 {method 'split' of 'str' objects}
   839978    0.288    0.000    0.288    0.000 {method 'readline' of 'file' objects}
        2    0.254    0.127    4.185    2.093 font_manager.py:544(createFontList)
   843308    0.170    0.000    0.170    0.000 {method 'startswith' of 'str' objects}
   114276    0.168    0.000    0.205    0.000 afm.py:72(_to_list_of_floats)
1563800      0.125    0.000    0.125    0.000 {len}
   839220    0.117    0.000    0.117    0.000 {method 'rstrip' of 'str' objects}
   115290    0.116    0.000    0.119    0.000 {method 'decode' of 'str' objects}
   117775    0.086    0.000    0.086    0.000 afm.py:56(_to_int)
       20    0.061    0.003    0.061    0.003 {built-in method poll}
      520    0.040    0.000    0.040    0.000 {method 'get_sfnt' of 'FT2Font' objects}
     6910    0.036    0.000    0.036    0.000 {posix.stat}
     3372    0.025    0.000    0.038    0.000 posixpath.py:336(normpath)

有什么办法可以修复/禁用它吗?

编辑:

回滚到1.3.1版本解决了我的问题,运行时间现在为0.2秒。


任何想法为什么回滚起作用?您是否向Matplotlib开发人员提交了错误报告? - JoErNanO
@JoErNanO,我不知道,抱歉,是的,我在这里提交了一个错误报告:https://github.com/matplotlib/matplotlib/issues/3655 - memecs
实际上无法复制,第一次安装后导入需要一段时间,但现在导入非常快。matplotlib 1.4.0 在Ubuntu 14.04上。 - Padraic Cunningham
1
抱歉,import pylab as plt 很痛苦。你应该使用 import matplotlib.pyplot as pltimport numpy as np - tacaswell
1
如果您解决了问题,可以自己发布答案并接受它。(如果您觉得自己不应该获得积分,可以将其设置为维基答案) - f.rodrigues
1个回答

18

我遇到了同样的问题。我发现当你升级 matplotlib 到新版本时,就会出现这个问题。字体缓存文件与新版本不兼容,但显然没有重新创建。相反,字体列表每次都是即时创建的。解决方法是删除 matplotlib 缓存目录(在我的情况下是 ~/.cache/matplotlib)。


在Windows的pip安装中,缓存目录是什么?编辑:啊,你的意思是当前目录(比如Python目录)? - Gustavo6046
我在 macOS 上遇到了类似的问题,其中许多字体都是符号链接,并且链接之间相互嵌套,这导致导入 pylab 或启动 sympy 非常缓慢。从 ~/Library/Fonts 文件夹中删除有问题的链接解决了这个问题。 - juandesant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接