matplotlib afm 导入极慢

17 投票
1 回答
4279 浏览
提问于 2025-04-28 02:18

导入时间太长,真让人受不了:

  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秒。

暂无标签

1 个回答

18

我也遇到过同样的问题。我发现这个问题发生在你把 matplotlib 升级到新版本的时候。旧的字体缓存文件和新版本不兼容,但似乎没有被重新创建。相反,每次使用时字体列表都是动态生成的。解决办法就是删除 matplotlib 的缓存文件夹(在我的情况下是 ~/.cache/matplotlib)。

撰写回答