Não é possível instalar o Lxml no Mac os x 10.9


234

Quero instalar o Lxml para poder instalar o Scrapy.

Quando atualizei meu Mac hoje, ele não me permitiu reinstalar o lxml, recebo o seguinte erro:

In file included from src/lxml/lxml.etree.c:314:
/private/tmp/pip_build_root/lxml/src/lxml/includes/etree_defs.h:9:10: fatal error: 'libxml/xmlversion.h' file not found
#include "libxml/xmlversion.h"
         ^
1 error generated.
error: command 'cc' failed with exit status 1

Eu tentei usar o brew para instalar libxml2 e libxslt, ambos instalados bem, mas ainda não consigo instalar o lxml.

A última vez que instalei, eu precisava habilitar as ferramentas de desenvolvedor no Xcode, mas desde que ele foi atualizado para o Xcode 5, ele não me dá mais essa opção.

Alguém sabe o que eu preciso fazer?


3
PS: Eu recomendo usar: pip3.4 install lxmlou STATIC_DEPS=true pip3.4 install lxmlcomandos se você estiver direcionando uma instalação específica para Python3 (adapte-se à sua versão, a conclusão do bash TAB é sua amiga); para que você instale a versão específica do seu programa de destino que está usando essas / essas bibliotecas. Caso contrário, é fácil gastar 30mn instalar o lib para o intérprete errado ;-)
— Phil L.

3
Certifique-se de marcar a resposta correta como a solução para que outros possam usar a sua pergunta como orientação quando eles têm o mesmo problema :)
— Parker

Respostas:


500

Você deve instalar ou atualizar a ferramenta de linha de comando para o xcode. Tente isso em um terminal:

xcode-select --install

24
Recebo "Não é possível instalar o software porque ele não está disponível no momento no servidor de Atualização de Software".
— Kelorek

7
Vale a pena notar que você parece obter "Não é possível instalar o software porque não está disponível no momento no servidor de Atualização de Software". quando as ferramentas já estiverem instaladas.
— quer

Algumas notas sobre como verificar manualmente se eles estão instalados - stackoverflow.com/a/20834890/255961
— studgeek

1
Funciona bem em 10.10.3. Não sei por que outras pessoas precisam manipular cflags.
— Eric Chen

1
E trabalhou para mim após a atualização para o El Capitan (10.11).
— Łukasz

193

Resolvi esse problema no Yosemite instalando e vinculando libxml2e libxsltatravés do brew:

brew install libxml2
brew install libxslt
brew link libxml2 --force
brew link libxslt --force

Se você resolveu o problema usando esse método, mas ele aparece novamente mais tarde, talvez seja necessário executá-lo antes das quatro linhas acima:

brew unlink libxml2
brew unlink libxslt

Se você está tendo erros de permissão com o Homebrew, especialmente no El Capitan, este é um documento útil . Em essência, independentemente da versão do OS X, tente executar:

sudo chown -R $(whoami):admin /usr/local

24
A resposta mais útil. É incrível como o xcode-select recebe tantos votos. Se você estiver usando o brew, você já selecionou o código ou instalou o xcode há muito tempo.
— Marcos Eliziário Santos

5
@ MarcosEliziárioSantos A palavra "instalar" no xcode-select --installé um pouco enganadora. Descobri que após a atualização do Mavericks para o Yosemite, eu precisava executar xcode-select --installnovamente para atualizar para as Ferramentas de Linha de Comando do Yosemite. Resolvia (parcialmente) os problemas que eu estava enfrentando e, em qualquer caso, seria inofensivo executar de forma redundante.
— Noach Magedman

2
@ MarcosEliziárioSantos provavelmente porque a resposta principal corrigiu o problema para a maioria das pessoas. Essa solução funcionou como uma solução alternativa, mas tive problemas semelhantes com o libmemcache alguns segundos depois. A resposta principal corrigiu o problema. Todos devem considerar esse método somente depois de tentar a resposta superior primeiro.
— Rafael Es

@ MarcosEliziárioSantos mais uma coisa - estou usando o brew, mas foi uma nova instalação (só tinha o XCode instalado via AppStore, o que é suficiente para instalar o homebrew).
— Rafael Es

Além disso, o Homebrew sempre arruina minhas permissões. Eu usei a solução Xcode.
— Sudo #

102

Você pode resolver seu problema executando isto na linha de comando:

 STATIC_DEPS=true pip install lxml

Com certeza me ajudou. Explicações sobre documentos


Muito obrigado. Isso me salvou incrivelmente tempo.
— Lukecampbell

Funciona bem no OSX
— 10.9.5

Obrigado! Funciona bem no macOS 10.14
— jolvera 01/11

48

Eu tentei a maioria das soluções acima, mas nenhuma delas funcionou para mim. Estou executando o Yosemite 10.10, a única solução que funcionou para mim foi digitar isso no terminal:

sudo CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2 CFLAGS=-Qunused-arguments CPPFLAGS=-Qunused-arguments pip install lxml

EDIT: Se você estiver usando virtualenv, o sudo no início não é necessário.


1
Esta solução também funciona no Mavericks! Se você estiver usando virtualenvnenhum sudo é necessário.
— Mauro Baraldi

O meu ainda está sendo produzido, OSError: [Errno 1] Operation not permitted: '/usr/bin/build'apesar de executar o comando como sudo. Alguma ideia?
— PLPeeters

@PLPeeters Qual versão do python você está executando e qual versão do sistema operacional?
— robinsj

Estou na versão beta do El Capitan (então é 10.11) e estou usando o Python 2.7 para isso. Eu estou supondo que poderia ter algo a ver com El Capitan ...
— PLPeeters

Você é um salva-vidas. O capitan funciona, no virtualenv não é necessário sudo. Obrigado!
— jacoor

24

Isso também me incomoda há um tempo. Eu não sei o interior o suficiente sobre distutils python etc, mas o caminho de inclusão aqui está errado. Fiz o seguinte truque feio para me prender até que o pessoal do python lxml possa fazer a correção adequada.

sudo ln -s  /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2/libxml/ /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml

19

Instalando globalmente ... OS X 10.9.2

xcode-select --install
sudo easy_install pip
sudo CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2 CFLAGS=-Qunused-arguments CPPFLAGS=-Qunused-arguments pip install lxml

1
Isso funcionou para mim, tinha de ferramentas de desenvolvimento Xcode atualização primeiro usando: xcode-selecionar --install
— erickthered

Isso fez o truque. Eu já tinha as ferramentas de linha de comando xcode instaladas, mas parece que precisava ser atualizada.
— Steven Mercatante

12

instruções de instalação em http://lxml.de/installation.html explicam:

Para acelerar a construção em ambientes de teste, por exemplo, em um servidor de integração contínua, desative as otimizações do compilador C configurando a variável de ambiente CFLAGS:

CFLAGS="-O0" pip install lxml

Funcionou perfeitamente para mim. +1
— João Pereira

11

Nenhuma das opções acima funcionou para mim no 10.9.2, pois a compilação falha com o seguinte erro:

clang: error: unknown argument: '-mno-fused-madd' 

O que realmente leva à solução mais limpa (veja mais detalhes em [1]):

export CFLAGS=-Qunused-arguments
export CPPFLAGS=-Qunused-arguments

pip install lxml

ou seguindo se estiver instalando globalmente

sudo pip install lxml

[1] clang error: argumento desconhecido: '-mno-fused-madd' (falha na instalação do pacote python)


obrigado. isso me ajudou. as respostas desejadas às vezes podem conter meta sobre as versões do sistema operacional.
— frankV

Se instalar globalmente pode ser necessário /etc/sudoerscom sudo visudoa preservar as variáveis de ambiente.
— swandog

10
xcode-select --install
sudo easy_install pip
sudo pip install lxml

É interessante que algumas pessoas precisassem sudoinstalar o pip, enquanto outras não. (Eu tive problemas de permissão ao executar o pip install diretamente e tive que sudo.) Só posso supor que eu havia instalado algo relacionado a python como raiz no passado distante, que criou certas pastas (do sistema) como raiz e não como eu.
— Noach Magedman

Isso funcionou para mim, eu tinha acabado de configurar um novo mac para o trabalho e, embora eu instalei o XCode, acho que ele não instalou as ferramentas de linha de comando? Enfim, executando isso, instalando as ferramentas e executando novamente o 'pip3.4 install lxml --user' funcionou, sem sudo ou EXPORTANDO quaisquer variáveis ​​de shell.
— 22415 mgrandi

Isso funcionou perfeitamente em Yosemite em um virtualenv. Eu não precisava sudo.
— N /

@NoachMagedman Estou instalando em um ambiente virtual, então não posso usar o sudo. Se eu usasse o sudo, ele seria instalado nos meus pacotes python globais, o que estou tentando evitar.
— Esteban

6

Resolvi esse problema Yosemiteexecutando os seguintes comandos:

xcode-select install #this may take several minutes.
pip install lxml

Eu tinha o suficiente de homebrew criando uma bagunça emaranhada de coisas no meu sistema antigo, então prometi não usá-lo com minha nova instalação do Yosemite 10.10.2. Eu já instalei o pacote completo do Xcode, então não há necessidade xcode-select installpara mim. Baixei os pacotes libxml2 e libxlst mais recentes (necessários para o lxml), mas antes de instalá-los, pensei em verificar se o Yosemite já possui esses arquivos em algum lugar. Criei um ambiente virtual (usando o virtualenvwrapper) pip install lxml, e criei, e o lxml instalou sem erros. Testei o lxml raspando a página inicial do google e funcionou bem.
— 7stud

4

Com o homebrew, o libxml2 fica oculto para não interferir com o sistema libxml2, portanto, o pip deve ser ajudado um pouco para encontrá-lo.

Com bash:

LDFLAGS=-L`brew --prefix libxml2`/lib CPPFLAGS=-I`brew --prefix libxml2`/include/libxml2 pip install --user lxml

Com peixe:

env LDFLAGS=-L(brew --prefix libxml2)/lib CPPFLAGS=-I(brew --prefix libxml2)/include/libxml2 pip install --user lxml

2

OSX 10.9.2

sudo env ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future STATIC_DEPS=true pip install lxml

2

Tentei todas as respostas desta página, nenhuma delas funcionou para mim. Estou executando o OS X versão 10.9.2

Mas isso definitivamente funciona .... como um encanto:

ARCHFLAGS = -Wno-erro = não utilizado-comando-linha-argumento-duro-erro-no-futuro-pip instalar lxml


1
Isso simplesmente desativa erros graves de argumentos não utilizados, que eu encontrei durante muitas outras compilações de bibliotecas no OS X Mavericks. Eu achei útil adicionar a linha ao meu perfil do bash, então não preciso procurá-la toda vez que a encontrar: export ARCHFLAGS="-Wno-error=unused-command-line-argument-hard-error-in-future"ou você pode adicionar tipos de arquitetura explicitamente assim:export ARCHFLAGS="-arch x86_64 -arch i386 -Wno-error=unused-command-line-argument-hard-error-in-future"
— Michiel Kauw-A-Tjoe

2

Infelizmente xcode-select --install, não funcionou para mim, pois eu já tinha a versão mais recente.

É muito estranho, mas resolvi o problema abrindo o XCode e aceitando os Termos e Condições. A nova execução pip install lxmlnão retornou erros depois.


1

Após a instalação bem-sucedida do pip (lxml 3.6.4), recebi um erro ao importar o módulo lxml.etree.

Eu estava pesquisando infinitamente para instalar isso como requisito para o scrapy e tentei todas as opções, mas finalmente funcionou para mim (mac osx 10.11 python 2.7):

$ STATIC_DEPS=true sudo easy_install-2.7 "lxml==2.3.5"

A versão mais antiga do lxml parece funcionar com o módulo etree.

O Pip geralmente pode ignorar a versão especificada de um pacote, por exemplo, quando você tem a versão mais recente no cache do pip, portanto, o easy_install. A '-2.7'opção é para a versão python, omita isso se você estiver instalando para o python 3.x.


1

No meu caso, devo encerrar o Kaspersky Antivirus antes de instalar o lxml:

pip install lxml

0

Estou usando o OSX 10.9.2 e recebo o mesmo erro.

A instalação das ferramentas de linha de comando XCode não ajuda nesta versão específica do OSX.

Eu acho que uma abordagem melhor para corrigir isso é instalar com o seguinte comando:

$ CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2 pip install lxml

Isso é semelhante à correção do jdkoftinoff ', mas não altera seu sistema de maneira permanente.


0

Encontrei a mesma pergunta e, após dias de trabalho, resolvi esse problema no meu OS X 10.9.4, com o Python 3.4.1.

Aqui está a minha solução,

De acordo com a instalação do lxml do lxml.de,

Um macport de lxml está disponível. Experimente algo como port install py25-lxml

Se você não possui o MacPort, instale-o no MacPort.org . É bem fácil Você também pode precisar de um compilador, para instalar as ferramentas de compilação do XCode, usexcode-select --install

Em primeiro lugar, atualizei minha porta para a versão mais recente via sudo port selfupdate,

Então, basta digitar sudo port install libxml2e, alguns minutos depois, você verá a libxml2 instalada com sucesso. Provavelmente você também pode precisar libxsltinstalar o lxml. Para instalar libxslt, use: sudo port install libxslt.

Agora, basta digitar pip install lxml, deve funcionar bem.


0

Antes de compilar, adicione o caminho para xmlversion.h em seu ambiente.

$ set INCLUDE=$INCLUDE:/private/tmp/pip_build_root/lxml/src/lxml/

Mas verifique se o caminho que forneci possui o arquivo xmlversion.h localizado dentro. Então,

$ python setup.py install



0

Após muito arrancamento dos cabelos e ranger dos dentes, desinstalei o xcode com pip e executei:

easy_install lxml

E tudo estava bem.


-1

Experimentar:

% STATIC_DEPS=true pip install lxml

Ou:

% STATIC_DEPS=true sudo pip install lxml

Funciona!


Duplicata da resposta de Andre.
— Kar
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.