Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';t导入matplotlib.pyplot,与字体相关的IOError_Python_Matplotlib_Fonts_Anaconda - Fatal编程技术网

Python Can';t导入matplotlib.pyplot,与字体相关的IOError

Python Can';t导入matplotlib.pyplot,与字体相关的IOError,python,matplotlib,fonts,anaconda,Python,Matplotlib,Fonts,Anaconda,我最近安装了Python的Anaconda发行版。当我尝试导入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 "licen

我最近安装了Python的Anaconda发行版。当我尝试导入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'
Python 2.7.8 | Anaconda 2.1.0(x86_64)|(默认,2014年8月21日,15:21:46)
[GCC 4.2.1(Apple Inc.build 5577)]关于达尔文
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
Anaconda由Continuum Analytics为您带来。
请查收:http://continuum.io/thanks 及https://binstar.org
>>>将matplotlib.pyplot作为plt导入
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/Users/lck/anaconda/lib/python2.7/site packages/matplotlib/pyplot.py”,第27行,在
导入matplotlib.colorbar
文件“/Users/lck/anaconda/lib/python2.7/site packages/matplotlib/colorbar.py”,第34行,在
将matplotlib.collections导入为集合
文件“/Users/lck/anaconda/lib/python2.7/site packages/matplotlib/collections.py”,第27行,在
导入matplotlib.backend_base作为后端_base
文件“/Users/lck/anaconda/lib/python2.7/site packages/matplotlib/backend_base.py”,第56行,在
将matplotlib.textpath导入为textpath
文件“/Users/lck/anaconda/lib/python2.7/site packages/matplotlib/textpath.py”,第19行,在
将matplotlib.font\u管理器导入为font\u管理器
文件“/Users/lck/anaconda/lib/python2.7/site packages/matplotlib/font_manager.py”,第1412行,在
_重建()
文件“/Users/lck/anaconda/lib/python2.7/site packages/matplotlib/font\u manager.py”,第1397行,在重建中
fontManager=fontManager()
文件“/Users/lck/anaconda/lib/python2.7/site packages/matplotlib/font_manager.py”,第1052行,在__
self.ttflist=createFontList(self.ttffiles)
createFontList中的文件“/Users/lck/anaconda/lib/python2.7/site packages/matplotlib/font_manager.py”,第579行
font=ft2font.ft2font(fpath)
IOError:[Errno 13]权限被拒绝:u'/Library/Fonts/Finale-lystic.ttf'

如何让matplotlib.pyplot加载,而不在出现“权限被拒绝”字体错误时停止?我不需要任何特定的字体(例如,我不需要使用“最终歌词斜体”-任何字体都可以)。任何想法都将不胜感激

这里要做的显而易见的事情是实际解决问题,而不是解决问题。您知道有问题文件的路径;只要
chmod
it

但是如果您需要解决这个问题(例如,您正在将程序部署到许多机器上,其中任何一台都可能有此问题)……那么,如果您仔细看,问题出在
font\u manager.createFontList
中。对于非AFM字体,
FT2Font
构造函数包装在一个
try
中,该构造函数处理
RuntimeError
unicodeeerror
,但不处理
IOError
*

你可以说这是matplotlib中的一个bug。我不确定,但如果你认为是的话

但不管怎样,您都需要一个修复程序,不管您是在本地使用它,还是在上游提交它。补丁很简单。在该函数中,只需更改以下内容:

try:
    font = ft2font.FT2Font(fpath)
except RuntimeError:
    verbose.report("Could not open font file %s"%fpath)
    continue
…致:

try:
    font = ft2font.FT2Font(fpath)
except (RuntimeError, IOError):
    verbose.report("Could not open font file %s"%fpath)
    continue
所以,有两种方法可以做到这一点

如果要修补
matplotlib
的副本,请在Github上创建分支,编辑文件副本,提交到fork,确保所有依赖项都是最新的,然后从fork的顶层安装
pip。
。(如果您已经提交了一个bug,您还应该创建一个pull请求,或者创建一个补丁文件并将其上传到bug报告。)**

如果您想从自己的代码中对其进行monkeypatch,请将整个
createFontList
函数复制到代码中,编辑副本,然后在定义后添加
matplotlib.font\u manager.createFontList=createFontList

*在本例中,您可以通过修补
ft2font.ft2font
来引发
RuntimeError
,但这不是Python,因此这将是一个更麻烦的问题


**正如建议的那样,您可以只编辑站点包中的
.py
文件,而不是编辑和重建项目。当然,这只能在一台机器上工作,如果以后需要,很容易忘记解决方法,并且可能需要您了解站点包的工作方式,但是如果所有这些听起来都正常,那么显然工作量要少得多。

我在Linux Mint 17.2中也遇到了同样的问题。我在终端中执行此操作: sudo chmod 644/my字体路径/*

对于您,请尝试: sudo chmod 644/库/字体/结局/*


更多信息可在此处找到

好吧,您可以通过修补
matplotlib
(在磁盘上或monkeypatching它),或通过强制为其构建字体缓存,或其他方式来解决此问题……但只通过
chmod
修补字体文件来解决此问题要简单得多。(如果你不知道如何做到这一点,这可能是超级用户的问题,而不是StackOverflow。)如果你真的想解决这个问题,那么可能有人会在这里向你展示如何做到这一点,但这将更加困难和笨拙。他也可以修补他已经拥有的代码,而不是经历所有Github的事情。如果执行
导入matplotlib;打印matplotlib.\uuuuu文件\uuuuu
以显示其位置。@user3267581:是;这可能导致必须知道如何查找不同版本的
.pyc
文件,查看
.egg
/
.zip
归档文件,并了解有关文件权限的更多信息,等等。而且,在多台机器上复制也比较困难(即使这仅仅意味着“我现在的机器,以及18个月后我将拥有的新笔记本电脑,当我忘记如何解决它时”)。如果它适用于OP,很好,它可以为他节省一些时间(so+1);但我不想把它写成一个通用的解决方案。谢谢!按照您的建议将
except RuntimeError:
更改为
except(RuntimeError,IOError):
我不想
chmod