我试图运行以下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无济于事,但我认为我的错误可能与那个有关。
答案 0 :(得分:7)
[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 auto doc生成中引起了问题。第二个是更清洁的修复,使两者都有效。
按照@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.
看起来很毛茸茸,但如果我读得正确的话,信息的要点是:sphinx对我混合conda和pip install不满意。
所以我最终将matplotlib恢复为conda安装。可悲的是,原来的libfreetype错误立即返回,我无法做基本的matplotlib导入(darn ...)
[步骤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是更清洁的方式。
答案 1 :(得分:1)
修正了......等等。
修正了它。
我已使用brew uninstall matplotlib
卸载,然后随pip install matplotlib
一起安装。 pip
版本现在可以使用了。 虽然我认为我的代码有问题,因为我没有得到图像输出。
我卸载了python
的所有安装,然后安装了ipython
,这很正常。另外,我忘了在plt.show();
命令之后添加imshow();
...... :( ....但至少其他人在我之前犯了这个错误......
请参阅此页面以获取有关matplotlib
imshow
个问题的全面帮助:
matplotlib does not show my drawings although I call pyplot.show()
答案 2 :(得分:0)
听起来你已经(至少部分地)回答了你自己的问题,但我以一种不同的方式解决了同样的错误。 摘要:我使用otool
和install_name_tool
手动将*.so
文件中的链接更改为其他*.dylib
。我在这里发布它主要是为了说明如果你不小心的话,构建系统如何迅速变成老鼠的巢穴。
我正在使用conda来管理我尝试从源代码编译的软件项目的虚拟环境(GNU Radio)。为了在我的Mac上本地构建这个项目的图形子模块(gr-qtgui
),我相信我犯了一些非常令人发指的危害自然的罪行 - 更多内容如下。
避免构建问题的基本策略是尽可能依赖单个包管理器。在这种情况下,荣誉归于conda
,但其中一些需要brew
和pip
。在我写这篇文章时,我现在想知道我是否应该与Qt4的Mac框架相关联,但我最终做的是链接libQtCore.dylib
等。由conda在~/miniconda3/envs/gr/lib
安装。*
在编译GNU Radio之后,我在这个虚拟环境中conda install
&#39; 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)
...
换句话说,它链接到位于虚拟环境内的libfreetype.dylib,而不是系统上的。排序有意义,因为pyplot也试图访问已经奇怪配置的图形库。我的解决方案是切换到自制类型的freetype链接:
>> install_name_tool -change @rpath/libfreetype.6.dylib /usr/local/Cellar/freetype/2.9/lib/libfreetype.6.dylib ft2font.so
现在matplotlib有效!
对不起,这变成了一个沉思而不是答案 - 或许有人会如此善意地为这种漫无边际的答案建议一个更好的地方?
*坦率地说,我从未考虑尝试链接/Library/Frameworks
中的Qt 框架。我不确定构建工具(这里是cmake)是否足够聪明才能找到这些框架,因为我还没有尝试过。我会考虑向社区提出这个问题。
答案 3 :(得分:0)
您可以尝试使用Anaconda运行python并检查conda环境中的freetype版本。
当我尝试在conda中安装opencv时遇到了同样的错误。最后,它由一个命令解决:
conda update freetype
答案 4 :(得分:0)
解决问题的两个步骤:
第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
答案 5 :(得分:-2)
检查路径触摸你的图像(和双重检查) 这是你的追溯: &#34;原因:找不到图像&#34;
此外,无需使用&#39;;&#39;在python中。