OSX 10.8 arquivo PIP matplotlib 'freetype / config / ftheader.h' não encontrado

3

Peço desculpas antecipadamente se este tópico já tiver sido discutido. Minha situação parece variar um pouco dos outros, de modo que o caminho para meus arquivos é diferente. Ao tentar instalar o matplotlib no Mac OS X 10.8.5, o seguinte erro é retornado:

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

Meu Homebrew tem o seguinte instalado:

fontconfig
gfortran
jpeg
libtiff
pkg-config
freetype
libpng

E estou usando a versão para Mac do Python 2.7.2 em / usr / bin / python

Então eu usei o Finder para procurar por ftheader.h e está dizendo que o arquivo está localizado em:

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

Minhas perguntas são:

  • O matplotlib está procurando por ftheader.h no lugar errado?
  • Se sim, como posso dizer para procurar no lugar certo?
  • Ou algo mais está causando o problema?

Obrigado!

Atualizar :

Isso parece ter resolvido o problema:

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

Isso cria um symlink de / usr / include / freetype para / usr / local / include / freetype2 / (quando você clica em / usr / include / freetype, você será redirecionado para / usr / local / include / freetype2 /) . Antes de criar o symlink, é melhor verificar se o primeiro caminho está correto no seu sistema. O segundo caminho será criado se não existir.

Depois de criar o symlink, eu tentei sudo pip install matplotlib novamente e desta vez ele foi instalado com sucesso. Mucho adere a este post para a ideia! Vou relatar se algo gerar um erro mais tarde a jusante.

Também vale a pena notar que existe um binário de matplotlib .

    
por fire_water 21.03.2014 / 18:29

1 resposta

5

Eu não acho que mudar o conteúdo de / usr / include (como sugerido em outra resposta, e em outros tópicos semelhantes) seja uma boa idéia em geral; essa é a "propriedade" da Apple. Uma pergunta semelhante no StackOverflow , no contexto de uma instalação Homebrew, em vez disso, recomends link dentro de / usr / local / include, o que é mais seguro, mas ainda provavelmente não é uma boa idéia, já que a Homebrew sustenta isso.

Acho que uma solução melhor é seguir as instruções de instalação do matplotlib e usar um arquivo setup.cfg para especificar os locais dos recursos que não estão onde eles esperam. Para fazer isso, deixando o pip gerenciar a instalação:

  1. Faça o download da fonte mpl e descompacte-a no DIR (por exemplo, DIR = matplotlib-1.3.1).

  2. cd DIR , copie 'setup.cfg.template' para 'setup.cfg' e edite a seção de diretórios para se parecer com o seguinte (supondo que você tenha instalado freetype2 em / usr / local, por exemplo, via 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. Crie o matplotlib no local (mas não o instale) por meio de: python setup.py build_ext (demora cerca de um minuto no meu MacBook Pro).

  4. Instale com pip dentro desse diretório: pip install . (observe o ponto!).

O Pip irá reconhecê-lo como matplotlib e indexar adequadamente.

Eu já tinha as dependências do mpl instaladas quando fiz isso, então não tenho certeza se a falta de algumas delas complica isso.

    
por 31.03.2014 / 08:42