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.