Skip to main content
 首页 » 编程设计

python之Matplotlib 错误 : libfreetype. 6.dylib

2025年05月04日9bluestorm

我正在尝试运行以下 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 , matplotlib , 和 numpy在brew ,我卸载了 MacPorts,错误没有任何变化。有什么建议吗?

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

Fatal Python error: PyThreadState_Get: no current thread Command terminated

错误仅在我 import 时出现matplotlib ,所以我猜问题出在 matplotlib 上.我将尝试使用 brew 重新安装它.

EDIT2:我一直在尝试从这个 page无济于事,但我认为我的错误可能与此有关。

请您参考如下方法:

[MacOS X] 安装 graphviz(可视化决策树)后遇到同样的问题。在没有仔细隔离环境的情况下,这个新包似乎已将自己喜欢的 freetype 版本放入我的默认 python 运行时库路径中。然后当做一个简单的 import 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 自动文档生成出现问题。第二个是使两者都起作用的更清晰的修复。


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

  • 上下文:我使用 anaconda python 发行版并使用 conda 作为我的主要包管理器
  • 剧透警告:暂时解决了导入问题,但后来在使用 sphinx 时遇到了麻烦
  • 要点:为主要库混合安装 pip 和 conda 可能会出现问题

正在关注 @Robbie Capps上面的建议,我卸载了原来用conda安装的matplotlib,改用pip重新安装。之后 matplotlib import 工作正常,我能够继续工作,直到后来我在运行 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.  

这看起来很复杂,但如果我没看错的话,消息的要点是:sphinx 对我混合使用 conda 和 pip 安装不满意。

所以我最终将 matplotlib 恢复为 conda 安装。可悲的是,原始的 libfreetype 错误立即返回,我无法进行基本的 matplotlib 导入(该死的......)


修复 2:更新位于运行时路径中的自由类型库(错误消息中的@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+版本,离解决问题又近了一步

[第二步]复制/usr/local/Cellar/freetype/2.9/lib/libfreetype.6.dylib到python运行库路径

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

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

这才有了freetype库版本不兼容的问题,matplotlib import和sphinx都开心


底线:修复 2 是更简洁的方法。