python - 由于 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
:
ttf-dejavu-core
libfreetype6-dev
fontconfig
我想知道是否有人有想法:
- 如果此字体是 Ubuntu 上的默认字体,或者我可以避免安装/删除它
- 如果有人遇到这个字体的问题,或者没有
- 如果有办法在加载 matplotlib 时忽略某种字体(或者如果 matplotlib 应该处理这个)
- 还有其他想法吗?:)
非常感谢!
解决方案
推荐阅读
- vb.net - 通过 Outlook 使用 ical 发送会议请求
- javascript - 获取包含空格的命令参数
- r - 从坐标中检索人口普查区
- asp.net - 在 ASP.Net MVC 中重定向时将带有 QueryString 的注册用户电子邮件发送到登录页面
- c# - 在 C# 中识别对 IP 地址的 ping 请求?
- javascript - 从php代码块调用带有php变量作为参数的javascript函数
- c++ - 为什么 std::vector::push_front() 不存在?
- c# - PromptDialog.Choice 之后的操作
- java - Spring Boot:无法实例化 [com.hazelcast.jet.JetInstance]
- c# - 如何在存储库模式中使用 lambda 连接表