我最近安装了Anaconda的Python发行版。当我尝试导入matplotlib.pyplot时,我收到“权限被拒绝”错误,因为字体管理器试图访问我的计算机上的一种字体。
Python 2.7.8 |Anaconda 2.1.0 (x86_64)| (default, Aug 21 2014, 15:21:46)
[GCC 4.2.1 (Apple Inc. build 5577)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://binstar.org
>>> import matplotlib.pyplot as plt
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/lck/anaconda/lib/python2.7/site-packages/matplotlib/pyplot.py", line 27, in <module>
import matplotlib.colorbar
File "/Users/lck/anaconda/lib/python2.7/site-packages/matplotlib/colorbar.py", line 34, in <module>
import matplotlib.collections as collections
File "/Users/lck/anaconda/lib/python2.7/site-packages/matplotlib/collections.py", line 27, in <module>
import matplotlib.backend_bases as backend_bases
File "/Users/lck/anaconda/lib/python2.7/site-packages/matplotlib/backend_bases.py", line 56, in <module>
import matplotlib.textpath as textpath
File "/Users/lck/anaconda/lib/python2.7/site-packages/matplotlib/textpath.py", line 19, in <module>
import matplotlib.font_manager as font_manager
File "/Users/lck/anaconda/lib/python2.7/site-packages/matplotlib/font_manager.py", line 1412, in <module>
_rebuild()
File "/Users/lck/anaconda/lib/python2.7/site-packages/matplotlib/font_manager.py", line 1397, in _rebuild
fontManager = FontManager()
File "/Users/lck/anaconda/lib/python2.7/site-packages/matplotlib/font_manager.py", line 1052, in __init__
self.ttflist = createFontList(self.ttffiles)
File "/Users/lck/anaconda/lib/python2.7/site-packages/matplotlib/font_manager.py", line 579, in createFontList
font = ft2font.FT2Font(fpath)
IOError: [Errno 13] Permission denied: u'/Library/Fonts/Finale Lyrics Italic.ttf'
如何让matplotlib.pyplot加载而不是停在此“权限被拒绝”字体错误?我不需要任何特定的字体(例如,我不需要使用“Finale Lyrics Italics” - 任何字体都可以)。任何想法都会非常感激!
答案 0 :(得分:4)
我在Linux Mint 17.2中遇到了同样的问题。我在我的终端这样做: sudo chmod 644 / my-fonts-path / *
对你而言,试试: sudo chmod 644 / Library / Fonts / Finale / *
答案 1 :(得分:2)
这里显而易见的事情是实际修复问题而不是解决问题。你知道违规文件的路径;只是chmod
它。
但是如果你需要解决它(例如,你正在将你的程序部署到许多机器上,其中任何一个都可能有这个问题)......好吧,如果你看一下the source,问题是在font_manager.createFontList
。对于非AFM字体,FT2Font
构造函数包含在处理try
和RuntimeError
的{{1}}中,但不包含UnicodeError
。*
你可能会认为这是matplotlib中的一个错误。我不确定,但如果你认为是,file a bug和post to the mailing list。
但无论哪种方式,您都需要修复,无论您是在本地使用它还是在上游提交它。补丁很简单。在该功能中,只需更改:
IOError
...为:
try:
font = ft2font.FT2Font(fpath)
except RuntimeError:
verbose.report("Could not open font file %s"%fpath)
continue
所以,有两种方法可以做到这一点。
如果要在Github上修补try:
font = ft2font.FT2Font(fpath)
except (RuntimeError, IOError):
verbose.report("Could not open font file %s"%fpath)
continue
,fork the repo的副本,请创建一个分支,编辑您的文件副本,提交到您的分支,确保您具有所有依赖关系日期,以及叉子顶层的matplotlib
或install directly from git。 (如果您提交了错误,您还应该创建一个拉取请求,或者创建一个补丁文件并将其上传到错误报告中。)**
如果您想要从自己的代码中对其进行monkeypatch,请将整个pip install .
函数复制到代码中,编辑副本,然后在定义后添加createFontList
。
*在这种情况下,您可以修改matplotlib.font_manager.createFontList = createFontList
来引发ft2font.FT2Font
,但那是implemented in C,而不是Python,所以这将更加痛苦。< /子>
**正如user3267581建议的那样,您只需编辑站点包中的RuntimeError
文件,而不是编辑和重建项目。当然这只能在一台机器上运行,如果你以后需要它会很容易忘记解决方法,并且可能需要你知道一些关于网站包如何工作的东西,但是如果所有这些都听起来不错,那显然要少得多工作子>