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?

David O'Regan
fonte
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
tinylee
fonte
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
Markus Amalthea Magnuson
fonte
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

André Augusto
fonte
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.

robinsj
fonte
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
jdkoftinoff
fonte
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
Samy Vilar
fonte
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
panchicore
fonte
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)

okigan
fonte
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
RemembranceNN
fonte
É 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
holys
fonte
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
Gaëtan Lehmann
fonte
2

OSX 10.9.2

sudo env ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future STATIC_DEPS=true pip install lxml
npiv
fonte
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

Hexatonic
fonte
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.

Adam Sheridan
fonte
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.

Ryszard Cetnarski
fonte
1

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

pip install lxml
Tho
fonte
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.

valo
fonte
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.

Peixes
fonte
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
knittledan
fonte
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.

duhaime
fonte
-1

Experimentar:

% STATIC_DEPS=true pip install lxml

Ou:

% STATIC_DEPS=true sudo pip install lxml

Funciona!

Geek4IT
fonte
Duplicata da resposta de Andre.
Kar