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

私は/usr/bin/pythonでMac版のPython 2.7.2を使用しています。

そこで 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/ にリダイレクトされます)。シンボリックリンクを作成する前に、システム上の最初のパスが正しいことを確認することをお勧めします。2 番目のパスが存在しない場合は作成されます。

シンボリックリンクを作成した後、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' にコピーし、ディレクトリ セクションを次のように編集します (Homebrew などを使用して、freetype2 を /usr/local にインストールしたと仮定します)。

    [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 では約 1 分かかります)。

  4. そのディレクトリ内から pip を使用してインストールします pip install .(ドットに注意してください)。

Pip はこれを matplotlib として認識し、適切にインデックスを付けます。

これを実行したときには、mpl の依存関係はすでにインストールされていたため、それらのいくつかが欠落していると複雑になるかどうかはわかりません。

関連情報