Matplotlib error: libfreetype.6.dylib
Matplotlib error: libfreetype.6.dylib
我正在尝试 运行 以下 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
,在 brew
中重新安装 freetype
、matplotlib
和 numpy
,并且我卸载了 MacPorts,但错误没有任何变化.建议?
编辑:卸载 MacPorts 并重新安装 brew
后,我现在收到此错误。
Fatal Python error: PyThreadState_Get: no current thread
Command terminated
错误仅在我 import
matplotlib
时出现,所以我猜问题出在 matplotlib
上。我会尝试用 brew
.
重新安装它
EDIT2:我一直在尝试从这个 page 无济于事,但我认为我的错误可能与那个有关。
检查图片的路径(并仔细检查)
这是在你的回溯中:
"Reason: image not found"
也没有必要使用';'在 python.
修复了...有点。
已修复。
我用 brew uninstall matplotlib
卸载,然后用 pip install matplotlib
安装。 pip
版本现在可用。 尽管我认为我的代码有问题,因为我没有得到图像输出。
我卸载了所有安装的 python
,然后安装了 ipython
,效果很好。另外,我忘记在我的 imshow();
命令后添加 plt.show();
... :-( ....但至少有人在我之前犯了这个错误...
请参阅此页面以获得有关任何 matplotlib
imshow
问题的非常全面的帮助:
matplotlib does not show my drawings although I call pyplot.show()
听起来您已经(至少部分地)回答了您自己的问题,但我以稍微不同的方式解决了同样的错误。 总结: 我使用 otool
和 install_name_tool
手动将 linkage 从 *.so
文件更改为不同的 *.dylib
.我将它张贴在这里主要是为了说明如果您不小心,构建系统如何快速变成老鼠的巢穴。
背景
我正在使用 conda 来管理我尝试从源代码编译的软件项目的虚拟环境 (GNU Radio)。为了在我的 Mac 上本地构建这个项目 (gr-qtgui
) 的图形子模块,我相信我犯下了一些非常令人发指的反自然罪行——更多内容见下文。
我避免构建问题的基本策略是尽可能依赖单个包管理器。在这种情况下,荣誉归于 conda
,尽管其中一些需要 brew
和 pip
。在我写这篇文章的时候,我现在想知道我是否应该 link 反对 Qt4 的 Mac 框架,但我最终做的是 link 反对 libQtCore.dylib
et al. 由 conda 安装在 ~/miniconda3/envs/gr/lib
.*
图形问题和解决方法
让 GNU Radio 编译后,我在这个虚拟环境中 conda install
'd matplotlib。我最初遇到了与 OP 最初提到的类似的错误:
ImportError: dlopen(/Users/strotmc1/miniconda3/envs/gr/lib/python2.7/site-packages/matplotlib/ft2font.so, 2): Library not loaded: @rpath/libfreetype.6.dylib
Referenced from: /Users/strotmc1/miniconda3/envs/gr/lib/python2.7/site-packages/matplotlib/ft2font.so
Reason: Incompatible library version: ft2font.so requires version 21.0.0 or later, but libfreetype.6.dylib provides version 14.0.0
我通过导航到有问题的共享对象的目录并检查它来解决它:
>> cd ~/miniconda3/envs/gr/lib/python2.7/site-packages/matplotlib
>> otool -L ft2font.so
ft2font.so:
@rpath/libfreetype.6.dylib (compatibility version 21.0.0, current version 21.0.0)
@rpath/libc++.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
>> otool -l ft2font.so
...
Load command 9
cmd LC_LOAD_DYLIB
cmdsize 56
name @rpath/libfreetype.6.dylib (offset 24)
time stamp 2 Wed Dec 31 19:00:02 1969
current version 21.0.0
compatibility version 21.0.0
...
Load command 12
cmd LC_RPATH
cmdsize 272
path /Users/strotmc1/miniconda3/envs/gr/lib (offset 12)
...
换句话说,它 linking 到位于虚拟环境中的 libfreetype.dylib,而不是在系统上。作为一个错误有点有意义,因为 pyplot 也在尝试访问已经奇怪配置的图形库。我的解决方案是针对 freetype 的自制版本切换到 linking:
>> install_name_tool -change @rpath/libfreetype.6.dylib /usr/local/Cellar/freetype/2.9/lib/libfreetype.6.dylib ft2font.so
现在 matplotlib 可以使用了!
故事的寓意
我一开始就说这个故事很难看。写完后,我得出以下结论:
- 尽管能够编译大型软件项目,但我仍然不知道我到底在做什么。
- 考虑到编写 general-purpose 库的难度,以及跨平台可能存在的差异,以及所有用户设置他们的系统的方式不同,我很惊讶任何 ever 有效。
- 另一方面,这真的是我们能做的最好的吗?似乎复杂性是问题的根源。任何足以管理复杂性的复杂工具是否必然会给系统带来更多的复杂性,从而增加失败的机会?
抱歉,这更像是一个沉思而不是一个答案——也许有人会为这种漫无边际的答案建议一个更好的地方?
*坦率地说,我什至从未考虑过 link 来对抗 /Library/Frameworks
中的 Qt 框架 。我不确定构建工具(这里是 cmake)是否足够智能以找到这些框架,因为我还没有尝试过。我会考虑向社区提出这个问题。
您可以尝试运行 python 与Anaconda 并检查您conda 环境中freetype 的版本。
我尝试在 conda 中安装 opencv 时遇到了相同类型的错误。最后通过一个命令解决了:
conda 更新 freetype
[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 自动文档生成出现问题。第二个是使两者都起作用的更清晰的修复。
修复 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 立即出现错误 returns,我无法进行基本的 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+版本,离解决问题又近了一步
[步骤2]复制/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 是更简洁的方法。
两步解决问题:
第 1 步:更新 freetype 并将 .dylib 复制到 anaconda lib 文件夹:
brew upgrade freetype
cp /usr/local/Cellar/freetype/2.10.4/lib/libfreetype.dylib ~/opt/anaconda3/lib/
第 2 步:按照以下导入顺序:
import matplotlib
matplotlib.use('PS')
import matplotlib.pyplot as plt
找到了一个对我有用的即时解决方案。
由于同一环境中的多个项目,我的 matplotlib 不支持新的更改。
pip3 uninstall matplotlib
pip3 install matplotlib
我正在尝试 运行 以下 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
,在 brew
中重新安装 freetype
、matplotlib
和 numpy
,并且我卸载了 MacPorts,但错误没有任何变化.建议?
编辑:卸载 MacPorts 并重新安装 brew
后,我现在收到此错误。
Fatal Python error: PyThreadState_Get: no current thread
Command terminated
错误仅在我 import
matplotlib
时出现,所以我猜问题出在 matplotlib
上。我会尝试用 brew
.
EDIT2:我一直在尝试从这个 page 无济于事,但我认为我的错误可能与那个有关。
检查图片的路径(并仔细检查) 这是在你的回溯中: "Reason: image not found"
也没有必要使用';'在 python.
修复了...有点。
已修复。
我用 brew uninstall matplotlib
卸载,然后用 pip install matplotlib
安装。 pip
版本现在可用。 尽管我认为我的代码有问题,因为我没有得到图像输出。
我卸载了所有安装的 python
,然后安装了 ipython
,效果很好。另外,我忘记在我的 imshow();
命令后添加 plt.show();
... :-( ....但至少有人在我之前犯了这个错误...
请参阅此页面以获得有关任何 matplotlib
imshow
问题的非常全面的帮助:
matplotlib does not show my drawings although I call pyplot.show()
听起来您已经(至少部分地)回答了您自己的问题,但我以稍微不同的方式解决了同样的错误。 总结: 我使用 otool
和 install_name_tool
手动将 linkage 从 *.so
文件更改为不同的 *.dylib
.我将它张贴在这里主要是为了说明如果您不小心,构建系统如何快速变成老鼠的巢穴。
背景
我正在使用 conda 来管理我尝试从源代码编译的软件项目的虚拟环境 (GNU Radio)。为了在我的 Mac 上本地构建这个项目 (gr-qtgui
) 的图形子模块,我相信我犯下了一些非常令人发指的反自然罪行——更多内容见下文。
我避免构建问题的基本策略是尽可能依赖单个包管理器。在这种情况下,荣誉归于 conda
,尽管其中一些需要 brew
和 pip
。在我写这篇文章的时候,我现在想知道我是否应该 link 反对 Qt4 的 Mac 框架,但我最终做的是 link 反对 libQtCore.dylib
et al. 由 conda 安装在 ~/miniconda3/envs/gr/lib
.*
图形问题和解决方法
让 GNU Radio 编译后,我在这个虚拟环境中 conda install
'd matplotlib。我最初遇到了与 OP 最初提到的类似的错误:
ImportError: dlopen(/Users/strotmc1/miniconda3/envs/gr/lib/python2.7/site-packages/matplotlib/ft2font.so, 2): Library not loaded: @rpath/libfreetype.6.dylib
Referenced from: /Users/strotmc1/miniconda3/envs/gr/lib/python2.7/site-packages/matplotlib/ft2font.so
Reason: Incompatible library version: ft2font.so requires version 21.0.0 or later, but libfreetype.6.dylib provides version 14.0.0
我通过导航到有问题的共享对象的目录并检查它来解决它:
>> cd ~/miniconda3/envs/gr/lib/python2.7/site-packages/matplotlib
>> otool -L ft2font.so
ft2font.so:
@rpath/libfreetype.6.dylib (compatibility version 21.0.0, current version 21.0.0)
@rpath/libc++.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
>> otool -l ft2font.so
...
Load command 9
cmd LC_LOAD_DYLIB
cmdsize 56
name @rpath/libfreetype.6.dylib (offset 24)
time stamp 2 Wed Dec 31 19:00:02 1969
current version 21.0.0
compatibility version 21.0.0
...
Load command 12
cmd LC_RPATH
cmdsize 272
path /Users/strotmc1/miniconda3/envs/gr/lib (offset 12)
...
换句话说,它 linking 到位于虚拟环境中的 libfreetype.dylib,而不是在系统上。作为一个错误有点有意义,因为 pyplot 也在尝试访问已经奇怪配置的图形库。我的解决方案是针对 freetype 的自制版本切换到 linking:
>> install_name_tool -change @rpath/libfreetype.6.dylib /usr/local/Cellar/freetype/2.9/lib/libfreetype.6.dylib ft2font.so
现在 matplotlib 可以使用了!
故事的寓意
我一开始就说这个故事很难看。写完后,我得出以下结论:
- 尽管能够编译大型软件项目,但我仍然不知道我到底在做什么。
- 考虑到编写 general-purpose 库的难度,以及跨平台可能存在的差异,以及所有用户设置他们的系统的方式不同,我很惊讶任何 ever 有效。
- 另一方面,这真的是我们能做的最好的吗?似乎复杂性是问题的根源。任何足以管理复杂性的复杂工具是否必然会给系统带来更多的复杂性,从而增加失败的机会?
抱歉,这更像是一个沉思而不是一个答案——也许有人会为这种漫无边际的答案建议一个更好的地方?
*坦率地说,我什至从未考虑过 link 来对抗 /Library/Frameworks
中的 Qt 框架 。我不确定构建工具(这里是 cmake)是否足够智能以找到这些框架,因为我还没有尝试过。我会考虑向社区提出这个问题。
您可以尝试运行 python 与Anaconda 并检查您conda 环境中freetype 的版本。
我尝试在 conda 中安装 opencv 时遇到了相同类型的错误。最后通过一个命令解决了:
conda 更新 freetype
[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 自动文档生成出现问题。第二个是使两者都起作用的更清晰的修复。
修复 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 立即出现错误 returns,我无法进行基本的 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+版本,离解决问题又近了一步
[步骤2]复制/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 是更简洁的方法。
两步解决问题:
第 1 步:更新 freetype 并将 .dylib 复制到 anaconda lib 文件夹:
brew upgrade freetype
cp /usr/local/Cellar/freetype/2.10.4/lib/libfreetype.dylib ~/opt/anaconda3/lib/
第 2 步:按照以下导入顺序:
import matplotlib
matplotlib.use('PS')
import matplotlib.pyplot as plt
找到了一个对我有用的即时解决方案。 由于同一环境中的多个项目,我的 matplotlib 不支持新的更改。
pip3 uninstall matplotlib
pip3 install matplotlib