OSX 10.8 PIP matplotlib'freetype/config/ftheader.h'文件未找到

OSX 10.8 PIP matplotlib'freetype/config/ftheader.h'文件未找到

如果这个话题已经讨论过了,我提前道歉。我的情况似乎与其他人略有不同,以至于我的文件路径不同。尝试在 Mac OS X 10.8.5 上安装 matplotlib 时返回以下错误:

pip install matplotlib
# lots of install details here...
/usr/X11/include/ft2build.h:56:10: fatal error: 'freetype/config/ftheader.h' file not found
#include <freetype/config/ftheader.h>
         ^
1 error generated.
error: command 'clang' failed with exit status 1
----------------------------------------
Cleaning up...
Command /usr/bin/python -c "import setuptools, tokenize;__file__='/private/tmp/pip_build_root/matplotlib/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-ohMPzS-record/install-record.txt --single-version-externally-managed --compile failed with error code 1 in /private/tmp/pip_build_root/matplotlib
Storing debug log for failure in /Users/administrator/Library/Logs/pip.log

我的 Homebrew 安装了以下内容:

fontconfig
gfortran
jpeg
libtiff
pkg-config
freetype
libpng

我使用的是 Mac 版本的 Python 2.7.2,位于 /usr/bin/python

因此我使用 Finder 搜索 ftheader.h,它显示该文件位于:

/opt/X11/include/freetype2/freetype/config/ftheader.h

我的问题是:

  • matplotlib 是否在错误的地方寻找 ftheader.h?
  • 如果是这样,我该如何告诉它在正确的位置查找?
  • 或者,是其他原因导致了这个问题?

谢谢你!

更新

这似乎已经解决了问题:

sudo ln -s /usr/local/include/freetype2/ /usr/include/freetype

这将创建从 /usr/include/freetype 到 /usr/local/include/freetype2/ 的符号链接(单击 /usr/include/freetype 时,您将被重定向到 /usr/local/include/freetype2/)。在创建符号链接之前,最好验证系统上的第一个路径是否正确。如果不存在,则会创建第二个路径。

创建符号链接后,我sudo pip install matplotlib再次尝试,这次成功安装。非常感谢这个帖子谢谢你的想法!如果后续出现错误,我会报告。

还值得注意的是matplotlib 二进制存在。

答案1

我认为改变 /usr/include 的内容(如另一个答案和其他类似帖子中所建议的)通常不是一个好主意;这是 Apple 的“财产”。类似的StackOverflow 上的问题在 Homebrew 安装环境中,建议在 /usr/local/include 内进行链接,这更安全,但可能仍然不是一个好主意,因为 Homebrew 坚持这一点。

我认为更好的解决方案是遵循 matplotlib 安装说明并使用 setup.cfg 文件来指定不在预期位置的资源的位置。在让 pip 管理安装的同时执行此操作:

  1. 下载 mpl 源并将其解压到 DIR(例如,DIR=matplotlib-1.3.1)。

  2. cd DIR,将“setup.cfg.template”复制到“setup.cfg”,并编辑目录部分使其如下所示(假设您已将 freetype2 安装到 /usr/local,例如通过 Homebrew):

    [directories]
    # Uncomment to override the default basedir in setupext.py.
    # This can be a single directory or a comma-delimited list of directories.
    #basedirlist = /usr
    basedirlist = /usr/local/include/freetype2/
    
  3. 通过以下方式就地构建 matplotlib(但不要安装它):(python setup.py build_ext在我的 MacBook Pro 上大约需要一分钟)。

  4. 使用 pip 从该目录进行安装:( pip install .注意点!)。

Pip 将会把它识别为 matplotlib 并进行适当的索引。

当我执行此操作时,我已经安装了 mpl 的依赖项,所以我不确定缺少其中一些是否会使这变得复杂。

相关内容