我正在尝试运行以下python脚本(我正在使用Vim):

import numpy as np;
import scipy as sp;
from scipy import misc;
import matplotlib.pyplot as plt;
image = misc.imread('test_image.jpg');
np.fliplr(image);
plt.imshow(image);


当我这样做时,我得到以下信息:

Traceback (most recent call last):
  File "test.py", line 4, in <module>
    import matplotlib.pyplot as plt;
  File "/Library/Python/2.7/site-packages/matplotlib/pyplot.py", line 24, in <module>
    import matplotlib.colorbar
  File "/Library/Python/2.7/site-packages/matplotlib/colorbar.py", line 29, in <module>
    import matplotlib.collections as collections
  File "/Library/Python/2.7/site-packages/matplotlib/collections.py", line 23, in <module>
    import matplotlib.backend_bases as backend_bases
  File "/Library/Python/2.7/site-packages/matplotlib/backend_bases.py", line 50, in <module>
    import matplotlib.textpath as textpath
  File "/Library/Python/2.7/site-packages/matplotlib/textpath.py", line 11, in <module>
    import matplotlib.font_manager as font_manager
  File "/Library/Python/2.7/site-packages/matplotlib/font_manager.py", line 53, in <module>
    from matplotlib import ft2font
ImportError: dlopen(/Library/Python/2.7/site-packages/matplotlib/ft2font.so, 2): Library not loaded: @loader_path/../../../libfreetype.6.dylib
  Referenced from: /Library/Python/2.7/site-packages/matplotlib/ft2font.so
  Reason: image not found
shell returned 1


我尝试重新安装brew,在freetype中重新安装matplotlibnumpybrew,并且我卸载了MacPorts,但未更改错误。有什么建议吗?

编辑:卸载MacPorts,然后重新安装brew后,我现在得到此错误。

Fatal Python error: PyThreadState_Get: no current threadCommand terminated

仅当我import matplotlib时才会出现该错误,因此我猜测问题出在matplotlib上。我将尝试使用brew重新安装它。

EDIT2:我一直在尝试从此page无效,但是我认为我的错误可能与该错误有关。

最佳答案

[MacOS X]安装graphviz后出现相同的问题(以可视化决策树)。在没有仔细隔离环境的情况下,这个新包似乎将自己喜欢的freetype版本放入了我的默认python运行时库路径中。然后,当执行简单的导入import matplotlib.pyplot as plt时,出现错误消息:

ImportError: dlopen(/Users/shandou/anaconda3/lib/python3.6/site-
packages/matplotlib/ft2font.cpython-36m-darwin.so, 2): Library not
loaded: @rpath/libfreetype.6.dylib
Referenced from: /Users/shandou/anaconda3/lib/python3.6/site-
packages/matplotlib/ft2font.cpython-36m-darwin.so
Reason: Incompatible library version: ft2font.cpython-36m-darwin.so
requires version 22.0.0 or later, but libfreetype.6.dylib provides
version 21.0.0


起初,我无法理解@rpath的实际含义。用locate libfreetype检查过,它看起来像是我的默认python环境,我有(1)/Users/shandou/anaconda3/lib/libfreetype.6.dylib和(2)/Users/shandou/anaconda3/pkgs/freetype-2.8.1-0

我尝试了以下两个修复程序。第一个解决了使matplotlib导入工作的迫切需要,但后来在sphinx自动doc生成中引起了问题。第二个是更清洁的修复程序,可以使两者同时起作用。



修复1:conda卸载,然后pip安装matplotlib


上下文:我使用anaconda python发行版,并使用conda作为我的主包管理器
剧透警报:暂时修复了导入问题,但后来在使用狮身人面像时让我陷入麻烦
要点:主要库的混合pip和conda安装可能会出现问题


按照上述@Robbie Capps的建议,我卸载了最初随conda一起安装的matplotlib,并改为使用pip重新安装了它。之后,matplotlib导入正常,并且我能够继续工作,直到以后运行sphinx记录文档时遇到错误:

File "/Users/shandou/anaconda3/lib/python3.6/site-
packages/matplotlib/backends/backend_macosx.py", line 17, in <module>
from matplotlib.backends import _macosx
RuntimeError: Python is not installed as a framework. The Mac OS X
backend will not be able to function correctly if Python is not
installed as a framework. See the Python documentation for more
information on installing Python as a framework on Mac OS X. Please
either reinstall Python as a framework, or try one of the other
backends. If you are using (Ana)Conda please install python.app and
replace the use of 'python' with 'pythonw'. See 'Working with
Matplotlib on OSX' in the Matplotlib FAQ for more information.


这看起来像毛茸茸的,但是如果我没看错的话,消息的要旨是:狮身人面像不满意我将conda和pip install混合在一起。

因此,我最终将matplotlib恢复为conda安装。不幸的是,原始的libfreetype错误立即返回,并且我无法执行基本的matplotlib导入(该死的...)



修复2:更新位于运行时路径中的freetype库(错误消息中的@rpath)


上下文:我尝试更新freetype,libpng和matplotlib-基本上是网络上建议的任何内容
剧透警报:如果未更新运行时路径库,则我会看到关于不兼容的libfreetype的相同错误消息


[步骤1] Brew安装freetype库:

$ brew install freetype
$ brew link --overwrite freetype


/usr/local/Cellar/freetype/2.9/lib/中检查库版本时,输出如下:

$ otool -L libfreetype.6.dylib | head -n 2
libfreetype.6.dylib:
/usr/local/opt/freetype/lib/libfreetype.6.dylib (compatibility version 23.0.0, current version 23.0.0)


这是21+版本,因此我们距离解决问题更近了一步

[步骤2]将/usr/local/Cellar/freetype/2.9/lib/libfreetype.6.dylib复制到python运行时库路径

事实证明,即使使用conda更新了freetype库之后,运行时库也不会更新。对我有用的最终解决方案是强制将较新的freetype lib复制到运行时路径:

$ cd /Users/shandou/anaconda3/lib/
$ sudo cp /usr/local/Cellar/freetype/2.9/lib/libfreetype.6.dylib .


只有这样,freetype库版本不兼容的问题才消失,并且matplotlib import和sphinx都感到满意



底线:修复2是更干净的方法。

关于python - Matplotlib错误:libfreetype.6.dylib,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28028786/

10-12 19:25