我正在安装matplotlib以使用底图今天我必须安装很多东西才能使它工作。安装matplotlib并能够导入后我安装了底图但由于此错误导致我无法导入底图:
来自mpl_toolkits.basemap导入底图
追踪(最近一次通话): 文件“”,第1行,in 文件“/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/mpl_toolkits/basemap/init.py”,第36行,in 从matplotlib.collections导入LineCollection 文件“/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/matplotlib/collections.py”,第22行,in 将matplotlib.backend_bases导入为backend_bases 文件“/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/matplotlib/backend_bases.py”,第38行,in 将matplotlib.widgets导入为小部件 文件“/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/matplotlib/widgets.py”,第16行,in 从行导入Line2D 文件“/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/matplotlib/lines.py”,第23行,in 来自matplotlib.font_manager导入FontProperties 文件“/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/matplotlib/font_manager.py”,第52行,in 来自matplotlib导入ft2font ImportError:dlopen(/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/matplotlib/ft2font.so,2):找不到符号:_FT_Attach_File 参考自:/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/matplotlib/ft2font.so 期望:动态查找
所以当我尝试在python中导入ft2font时:
来自matplotlib import ft2font
我收到了这个错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: dlopen(/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/matplotlib/ft2font.so, 2): Symbol not found: _FT_Attach_File
Referenced from: /usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/matplotlib/ft2font.so
Expected in: dynamic lookup
知道该怎么办? 我正在使用由homebrew安装的Mac OSX 10.6和python 2.7.2。
答案 0 :(得分:6)
我遇到了同样的问题。即使在运行make.osx
之后,当我从matplotlib导入_FT_Attach_File
时,它仍然抱怨ft2font
未定义。这是我如何追踪问题。希望它会帮助别人。
正在运行otool -L ft2font.so
:
ft2font.so:
/Users/jbenuck/mpl_build/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
注意没有提到libfreetype! ft2font.so
如果没有链接符号,应该如何定位符号?
我的下一步是捕获构建期间使用的命令:
make -f make.osx PREFIX=/usr/local clean fetch deps mpl_build > output.txt
搜索这个产生了用于编译有问题的python模块的命令。我将输出文件的值更改为本地目录中的值并运行它:
/ Developer / usr / bin / llvm -g ++ - 4.2 -bundle -undefined dynamic_lookup -isysroot / -L / opt / local / lib -arch i386 -arch x86_64 -L / usr / local / lib -syslibroot,/ Developer /SDKs/MacOSX10.7.sdk -arch i386 -arch x86_64 -I / usr / local / include -I / usr / local / include / freetype2 -isysroot /Developer/SDKs/MacOSX10.7.sdk build / temp.macosx- 10.7-x86_64-2.7 / src / ft2font.o build / temp.macosx-10.7-x86_64-2.7 / src / mplutils.o build / temp.macosx-10.7-x86_64-2.7 / CXX / cxx_extensions.o build / temp.macosx -10.7-x86_64-2.7 / CXX / cxxsupport.o build / temp.macosx-10.7-x86_64-2.7 / CXX / IndirectPythonInterface.o build / temp.macosx-10.7-x86_64-2.7 / CXX / cxxextensions.o -L / usr / local / lib -L / usr / local / lib -L / usr / lib -L / usr / X11 / lib -lfreetype -lz -lstdc ++ -lm -o ft2font.so
ld:警告:忽略文件/opt/local/lib/libfreetype.dylib,文件是为不支持的文件格式构建的,而不是所链接的体系结构(x86_64)
宾果!发现问题。我知道我安装了macport和homebrew。显然,其中一个在libfreetype
中的/opt/local/lib
版本没有为64位编译。
我重新删除了"-L /opt/local/lib"
删除的命令,但没有发出警告。现在,将生成的ft2font.so
复制到我现有的matplotlib安装中,可以让我从matplotlib成功导入ft2font
。
答案 1 :(得分:5)
在我的情况下,这是一个架构问题 - 我安装了64位版本的freetype(matplotlib很高兴编译)但是当我在32位版本的python中运行时,我得到了这个错误。简单的解决方案是卸载所有内容(freetype,matplotlib),然后使用自制软件和--universal标志安装32位和64位版本:
brew install freetype --universal
注意,我也必须为libpng(brew install libpng --universal
)执行此操作。并非所有自制食谱都支持通用旗帜,但对于那些有所帮助的人来说,这是一个巨大的帮助。 (您可以使用brew info <FORMULA>
查看公式的选项)。
另外,使用make.osx Makefile和homebrew进行编译是完全失败的;根据我的经验,我推荐一个或另一个。
答案 2 :(得分:4)
好的,我明白了。
我从github(https://github.com/matplotlib/)的源代码重新安装了matplotlib然后(而不是普通的python setup.py安装)我运行了README.OSX中描述的make.osx:
make -f make.osx PREFIX=/devjunk PYVERSION=2.7 \
clean fetch deps mpl_install_std
现在一切正常。