从matplotlib导入错误ft2font(python,macosx)

Tom*_*s K 7 python macos matplotlib

我今天安装matplotlib以使用底图,因为我必须安装很多东西才能使它工作.安装matplotlib并能够导入后我安装了底图但由于此错误导致我无法导入底图:

来自mpl_toolkits.basemap导入底图

回溯(最近通话最后一个):文件"",1号线,在文件"/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/mpl_toolkits/basemap/ 初始化的.py"第36行,来自matplotlib.collections,导入LineCollection文件"/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/matplotlib/collections.py",第22行,导入matplotlib.backend_bases as backend_bases文件"/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/matplotlib/backend_bases.py",第38行,在导入matplotlib.widgets中作为小部件文件"/ usr/local /Cellar/python/2.7.2/lib/python2.7/site-packages/matplotlib/widgets.py",第16行,从行导入Line2D文件"/usr/local/Cellar/python/2.7.2/lib /python2.7/site-packages/matplotlib/lines.py",第23行,来自matplotlib.font_manager导入FontProperties文件"/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages /matplotlib/font_manager.py",第52行,来自matplotlib import ft2font ImportError:dlopen(/usr/local/Cellar/python/2.7.2/lib/python2.7/site-pack age/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导入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
Run Code Online (Sandbox Code Playgroud)

知道该怎么办?我正在使用自制软件安装的Mac OSX 10.6和python 2.7.2.

小智 7

我遇到了同样的问题.即使在运行之后make.osx,它仍然抱怨_FT_Attach_Fileft2font从matplotlib 导入时未定义.这是我如何追踪问题.希望它会帮助别人.

跑步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)
Run Code Online (Sandbox Code Playgroud)

注意没有提到libfreetype!ft2font.so如果符号没有链接,应该如何定位符号?

我的下一步是捕获构建期间使用的命令:

    make -f make.osx PREFIX=/usr/local clean fetch deps mpl_build > output.txt
Run Code Online (Sandbox Code Playgroud)

搜索这个产生了用于编译有问题的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安装现在允许我ft2font从matplotlib 成功导入.


Eri*_*man 5

在我的情况下,这是一个架构问题 - 我安装了64位版本的freetype(matplotlib很高兴编译)但是当我运行32位版本的python时,我得到了这个错误.简单的解决方案是卸载所有内容(freetype,matplotlib),然后使用自制软件和--universal标志安装32位和64位版本:

brew install freetype --universal
Run Code Online (Sandbox Code Playgroud)

注意,我也必须为libpng做这个(brew install libpng --universal).并非所有自制食谱都支持通用旗帜,但对于那些有所帮助的人来说,这是一个巨大的帮助.(你可以看到公式的选项brew info <FORMULA>).

另外,使用make.osx Makefile和homebrew进行编译是完全失败的; 根据我的经验,我推荐一个或另一个.


Tom*_*s K 4

好吧,我明白了。

我从 github (https://github.com/matplotlib/) 的源代码重新安装了 matplotlib,然后(而不是普通的 python setup.py install)我运行了 README.OSX 中描述的 make.osx:

make -f make.osx PREFIX=/devjunk PYVERSION=2.7 \
  clean fetch deps mpl_install_std
Run Code Online (Sandbox Code Playgroud)

现在一切正常。