我尝试运行以下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);
当我这样做时,我会得到以下信息:
^{pr2}$我尝试重新安装brew
,重新安装freetype
,matplotlib
,和{brew
中,我卸载了MacPorts,错误没有发生任何变化。建议?在
编辑:在卸载MacPorts并重新安装brew
之后,我现在得到了这个错误。在
Fatal Python error: PyThreadState_Get: no current thread
Command terminated
只有当我import
matplotlib
时才会出现错误,所以我猜问题出在matplotlib
上。我将尝试用brew
重新安装它。在
编辑2:我一直在尝试从这个page开始,但我认为我的错误可能与那一个有关。在
听起来你已经(至少部分地)回答了你自己的问题,但我以一种不同的方式解决了同样的错误。摘要:我使用}。我在这里发布它主要是为了说明如果你不小心,构建系统是如何迅速变成老鼠窝的。在
otool
和install_name_tool
手动将*.so
文件的链接更改为另一个{背景
我使用conda来管理我试图从源代码(GNU Radio)编译的软件项目的虚拟环境。为了在我的Mac电脑上构建这个项目的图形子模块(
gr-qtgui
),我相信我犯了一些非常令人发指的违反自然的罪行——下面将详细介绍。在我避免构建问题的基本策略是尽可能依赖单个包管理器。在本例中,这个荣誉授予了}。在我写这篇文章的时候,我想知道我是否应该链接到Qt4的Mac框架上,但是我最终做的是链接到
conda
,尽管其中一些需要brew
和{libQtCore.dylib
等。由conda在~/miniconda3/envs/gr/lib
安装。*问题解决方案3>
在让GNU Radio编译完成之后,我在这个虚拟环境中
conda install
生成matplotlib。一开始我也遇到了一个和OP最初提到的类似的错误:我通过导航到有问题的共享对象的目录并检查它来解决问题:
^{pr2}$换句话说,它链接到libfreetype.dylib位于虚拟环境中,而不是系统上。这有点像是一个错误,因为pyplot还试图访问图形库,这些库的配置已经很奇怪了。我的解决方案是切换到针对freetype的自制版本链接:
现在matplotlib起作用了!在
故事的寓意
我从一开始就说这个故事很难看。写完这篇文章后,我得出以下结论:
抱歉,这变成了一个沉思而不是一个答案——也许有人会这么好心地建议一个更好的地方来回答这种杂乱无章的问题?在
*坦率地说,我甚至从未考虑过要与位于
/Library/Frameworks
中的Qt框架进行链接。我不确定构建工具(这里是cmake)是否足够聪明来找到这些框架,因为我还没有尝试过。我会考虑向社会提出这个问题。在[macosx]在安装
graphviz
(可视化决策树)后遇到了相同的问题。在没有仔细隔离环境的情况下,这个新的包似乎已经把它自己喜欢的freetype版本放到了我默认的python运行库路径中。然后,在执行简单的导入import matplotlib.pyplot as plt
时,我收到了错误消息:一开始,我不明白
@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
按照上面@Robbie Capps的建议,我卸载了最初与conda一起安装的matplotlib,并用pip重新安装了它。后来matplotlib导入工作正常,我可以继续工作,直到后来在运行sphinx记录代码时遇到错误:
^{pr2}$这看起来有点毛骨悚然,但如果我没看错,那么这条消息的要点是:斯芬克斯对我混合conda和pip安装不满意。在
所以我最终将matplotlib恢复到conda安装。遗憾的是,最初的libfreetype错误立即返回,我无法执行基本的matplotlib导入(darn…)
修复2:更新运行时路径中的freetype库(错误消息中的@rpath)
[步骤1]Brew安装freetype库:
在
/usr/local/Cellar/freetype/2.9/lib/
中检查库版本时,我得到如下输出:这是21+版本,所以我们离解决问题又近了一步
[步骤2]将
/usr/local/Cellar/freetype/2.9/lib/libfreetype.6.dylib
复制到python运行库路径事实证明,即使在用conda更新freetype库之后,运行库也没有更新。最后一个对我有用的解决方案是强制将更新的freetype lib复制到运行时路径:
只有这样,freetype库版本不兼容的问题才没有了,matplotlib import和sphinx都很满意
底线:修复2是更干净的方法。在
修好了。。。差不多吧。修好了。在
我用
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()
相关问题 更多 >
编程相关推荐