首页 > 解决方案 > 由于 Ubuntu 上的 ArialMT 字体,无法导入 matplotlib.pyplot

问题描述

我正在尝试ubuntu:xenial-20200212使用 Python 2.7 更新我在 Docker 映像 Ubuntu 16.04 ( ) 中的 matplotlib 依赖项(但使用 Python 3.7 也会出现同样的问题),但是当我运行时python2.7 -c 'import matplotlib.pyplot',我收到错误消息:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 31, in <module>
    import matplotlib.colorbar
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/colorbar.py", line 36, in <module>
    import matplotlib.contour as contour
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/contour.py", line 22, in <module>
    import matplotlib.font_manager as font_manager
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/font_manager.py", line 1474, in <module>
    _rebuild()
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/font_manager.py", line 1455, in _rebuild
    fontManager = FontManager()
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/font_manager.py", line 1095, in __init__
    self.afmlist = createFontList(self.afmfiles, fontext='afm')
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/font_manager.py", line 580, in createFontList
    font = afm.AFM(fh)
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/afm.py", line 338, in __init__
    parse_afm(fh)
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/afm.py", line 326, in parse_afm
    dcmetrics_ascii, dcmetrics_name = _parse_char_metrics(fh)
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/afm.py", line 199, in _parse_char_metrics
    vals = dict(s.strip().split(' ', 1) for s in line.split(';') if s)
ValueError: dictionary update sequence element #3 has length 1; 2 is required

使用时一切正常matplotlib==1.4,但我正在尝试更新到matplotlib==2.2.5然后我无法导入matplotlib.pyplot.

$ python2.7
Python 2.7.12 (default, Jul 21 2020, 15:19:50) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib
>>> matplotlib.__version__
'2.2.5'

当试图进一步调查并查看 matplotlib 似乎失败的 AFM 字体文件时,这是在 matplotlib 解析文件时/usr/share/fonts/type1/arial/ArialMT.afm,更准确地说,这里是_parse_char_metrics正在处理的文件的最后 5 行:

C -1 ; WX 333 ; N radicalex ; B -15 599 349 671 ;      
C -1 ; WX 166 ; N fraction ; B -222 -28 392 728 ;      
C -1 ; WX 0 ; N uni206A ; B -114 -134 114 690 ;            
C -1 ; WX 0 ; N uni206B ; B -114 -134 114 690 ;            
C -1 ; WX 0 ; N uni206C; ; B -114 -134 114 690 ;

然后它失败了。如您所见,最后一行包含另一个;似乎是崩溃的原因。

通过以下方式在机器上额外安装的字体包中apt-get

我想知道是否有人有想法:

  1. 如果此字体是 Ubuntu 上的默认字体,或者我可以避免安装/删除它
  2. 如果有人遇到这个字体的问题,或者没有
  3. 如果有办法在加载 matplotlib 时忽略某种字体(或者如果 matplotlib 应该处理这个)
  4. 还有其他想法吗?:)

非常感谢!

标签: pythonmatplotlibfonts

解决方案


推荐阅读