No se puede instalar Lxml en Mac os x 10.9

234

Quiero instalar Lxml para poder instalar Scrapy.

Cuando actualicé mi Mac hoy, no me permitió reinstalar lxml, recibo el siguiente error:

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

He intentado usar brew para instalar libxml2 y libxslt, ambos bien instalados, pero todavía no puedo instalar lxml.

La última vez que instalé necesitaba habilitar las herramientas de desarrollador en Xcode, pero como se actualizó a Xcode 5 ya no me da esa opción.

¿Alguien sabe lo que necesito hacer?

David O'Regan
fuente
3
PD: Recomiendo usar: pip3.4 install lxmlo STATIC_DEPS=true pip3.4 install lxmlcomandos si está apuntando a una instalación específica para Python3 (adáptese a su versión, bash TAB complete es su amigo); para que instales la versión específica de tu programa de destino que está usando esta / estas librerías. De lo contrario, es fácil gastar 30 minutos instalando la biblioteca para el intérprete incorrecto ;-)
Phil L.
3
Asegúrese de marcar la respuesta correcta como la solución para que otros puedan usar su pregunta como guía cuando tengan el mismo problema :)
Parker

Respuestas:

500

Debe instalar o actualizar la herramienta de línea de comandos para xcode. Prueba esto en una terminal:

xcode-select --install
tinylee
fuente
24
Aparece el mensaje "No se puede instalar el software porque actualmente no está disponible desde el servidor de Actualización de software".
kelorek
77
Vale la pena señalar que parece que aparece "No se puede instalar el software porque actualmente no está disponible desde el servidor de Actualización de software". cuando las herramientas ya están instaladas.
wombat
Algunas notas sobre cómo verificar manualmente si están instaladas - stackoverflow.com/a/20834890/255961
studgeek
1
Funciona bien en 10.10.3. No estoy seguro de por qué otros necesitan manipular cflags.
Eric Chen
1
Y trabajó para mí después de la actualización a El Capitan (10.11).
Łukasz
193

Resolví este problema en Yosemite instalando y vinculando libxml2y a libxslttravés de brew:

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

Si ha resuelto el problema utilizando este método pero aparece de nuevo más tarde, es posible que deba ejecutarlo antes de las cuatro líneas anteriores:

brew unlink libxml2
brew unlink libxslt

Si tiene errores de permiso con Homebrew, especialmente en El Capitan, este es un documento útil . En esencia, independientemente de la versión de OS X, intente ejecutar:

sudo chown -R $(whoami):admin /usr/local
Markus Amalthea Magnuson
fuente
24
La respuesta más útil. Es increíble cómo el xcode-select obtiene tantos votos. Si está utilizando brew, ya seleccionó o instaló xcode hace mucho tiempo.
Marcos Eliziário Santos
55
@ MarcosEliziárioSantos La palabra "instalar" xcode-select --installes un poco engañosa. Descubrí que después de actualizar de Mavericks a Yosemite, necesitaba correr xcode-select --installnuevamente para actualizar a las Herramientas de línea de comando de Yosemite. Solucionó (parcialmente) los problemas con los que me encontraba y, en cualquier caso, sería inofensivo ejecutarlos de forma redundante.
Noach Magedman
2
@ MarcosEliziárioSantos probablemente porque la respuesta principal solucionó el problema para la mayoría de las personas. Esta solución funcionó como una solución, pero me encontré con problemas similares con libmemcache unos segundos después. La respuesta superior solucionó el problema. Todos deberían considerar este método solo después de probar primero la respuesta principal.
Rafal Es
@ MarcosEliziárioSantos una cosa más: estoy usando brew pero fue una instalación nueva (solo tenía XCode instalado a través de AppStore, que es suficiente para instalar homebrew).
Rafal Es
Además, Homebrew siempre arruina mis permisos. Usé la solución Xcode.
sudo
102

Puede resolver su problema ejecutando esto en la línea de comandos:

 STATIC_DEPS=true pip install lxml

Seguro que me ayudó. Explicaciones sobre documentos

André Augusto
fuente
Muchas gracias. Esto me ahorró una increíble cantidad de tiempo.
lukecampbell
Funciona bien en OSX 10.9.5
user9869932
¡Gracias! Funciona bien en macOS 10.14
jolvera
48

Probé la mayoría de las soluciones anteriores, pero ninguna funcionó para mí. Estoy ejecutando Yosemite 10.10, la única solución que me funcionó fue escribir esto en la 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

EDITAR: Si está utilizando virtualenv, el sudo al principio no es necesario.

robinsj
fuente
1
¡Esta solución también funciona en Mavericks! Si está utilizando virtualenvno se necesita sudo.
Mauro Baraldi
El mío todavía está saliendo a OSError: [Errno 1] Operation not permitted: '/usr/bin/build'pesar de ejecutar el comando como sudo. ¿Algunas ideas?
PLPeeters
@PLPeeters ¿Qué versión de Python está ejecutando y qué versión del sistema operativo?
robinsj
Estoy en la versión beta de El Capitan (eso es 10.11) y estoy usando Python 2.7 para esto. Supongo que podría tener algo que ver con El Capitán ...
PLPeeters
Eres un salvavidas. El capitan funciona, en virtualenv no se necesita sudo. ¡Gracias!
jacoor
24

Esto también me ha estado molestando por un tiempo. No conozco lo suficiente sobre Python Distutils, etc., pero la ruta de inclusión aquí es incorrecta. Hice el siguiente truco feo para detenerme hasta que la gente de python lxml pueda hacer la solución adecuada.

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
fuente
19

Instalación global ... 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
fuente
1
Esto funcionó para mí, tuve que actualizar las herramientas de desarrollo de xcode primero usando: xcode-select --install
erickthered
Esto hizo el truco. Ya tenía instaladas las herramientas de línea de comandos de xcode, pero parece que necesitaba actualizarse.
Steven Mercatante
12

Las instrucciones de instalación en http://lxml.de/installation.html explican:

Para acelerar la compilación en entornos de prueba, por ejemplo, en un servidor de integración continua, desactive las optimizaciones del compilador de C configurando la variable de entorno CFLAGS:

CFLAGS="-O0" pip install lxml
panchicore
fuente
Funcionó sin problemas para mí. +1
João Pereira
11

Nada de lo anterior funcionó para mí en 10.9.2, ya que la compilación se rescata con el siguiente error:

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

Que en realidad conducen a una solución más limpia (ver más detalles en [1]):

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

pip install lxml

o siguiendo si se instala globalmente

sudo pip install lxml

[1] error de clang: argumento desconocido: '-mno-fused-madd' (error de instalación del paquete de Python)

okigan
fuente
Gracias. Esto me ayudó. Las respuestas al deseo a veces pueden contener meta sobre las versiones del sistema operativo.
frankV
Si va a instalar a nivel mundial es posible que necesite /etc/sudoerscon sudo visudopreservar las variables de entorno.
swandog
10
xcode-select --install
sudo easy_install pip
sudo pip install lxml
RecuerdoNN
fuente
Es interesante que algunas personas necesitaran sudola instalación de pip mientras que otras no. (Tuve problemas de permisos al ejecutar pip install directamente, y tuve que sudo.) Solo puedo suponer que había instalado algo relacionado con python como root en el pasado distante, lo que creó ciertas carpetas (del sistema) como root en lugar de como yo mismo.
Noach Magedman
Esto funcionó para mí, acababa de configurar una nueva Mac para el trabajo y aunque instalé XCode, ¿supongo que no instaló las herramientas de línea de comandos? De todos modos, ejecutar esto, hacer que instale las herramientas y luego volver a ejecutar 'pip3.4 install lxml --user' funcionó, sin sudo o EXPORTANDO cualquier variable de shell.
mgrandi
Esto funcionó perfectamente en Yosemite en un virtualenv. Aunque no lo necesitaba sudo.
nils
@NoachMagedman Estoy instalando en un entorno virtual, por lo que no puedo usar sudo. Si usara sudo, lo instalaría en mis paquetes globales de Python, que es lo que estoy tratando de evitar.
Esteban
6

Resolví este problema Yosemiteejecutando los siguientes comandos:

xcode-select install #this may take several minutes.
pip install lxml
holys
fuente
Ya tenía suficiente de homebrew creando un enredo de cosas en mi viejo sistema, así que prometí no usarlo con mi nueva configuración de Yosemite 10.10.2. Ya instalé todo el paquete Xcode, por lo que no es necesario xcode-select installpara mí. Descargué los últimos paquetes libxml2 y libxlst (necesarios para lxml), pero antes de instalarlos pensé en verificar si Yosemite ya tiene esos archivos en algún lugar. pip install lxmlCreé un entorno virtual (usando virtualenvwrapper), y luego lo hice , y lxml instaló sin errores. Probé lxml raspando la página de inicio de google, y funcionó bien.
7stud
4

Con homebrew, libxml2 está oculto para no interferir con el sistema libxml2, por lo que se debe ayudar un poco a pip para encontrarlo.

Con bash:

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

Con pescado:

env LDFLAGS=-L(brew --prefix libxml2)/lib CPPFLAGS=-I(brew --prefix libxml2)/include/libxml2 pip install --user lxml
Gaëtan Lehmann
fuente
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
fuente
2

Intenté todas las respuestas en esta página, ninguna de ellas funcionó para mí. Estoy ejecutando OS X versión 10.9.2

Pero esto definitivamente funciona ... como un encanto:

ARCHFLAGS = -Wno-error = unused-command-line-argumentos-hard-error-in-future pip install lxml

Hexatónico
fuente
1
Esto simplemente deshabilita los errores duros para los argumentos no utilizados, que he encontrado durante muchas otras compilaciones de bibliotecas en OS X Mavericks. He encontrado útil agregar la línea a mi perfil de bash, así que no tengo que buscarla cada vez que la encuentro: export ARCHFLAGS="-Wno-error=unused-command-line-argument-hard-error-in-future"o puedes agregar tipos de arquitectura explícitamente como esta:export ARCHFLAGS="-arch x86_64 -arch i386 -Wno-error=unused-command-line-argument-hard-error-in-future"
Michiel Kauw-A-Tjoe
2

Lamentablemente xcode-select --installno funcionó para mí, ya que tenía la última versión.

Es muy extraño, pero resolví el problema abriendo XCode y aceptando los Términos y condiciones. Volver a ejecutar pip install lxmlno devolvió errores después.

Adam Sheridan
fuente
1

Después de una instalación exitosa desde pip (lxml 3.6.4) recibí un error al importar el módulo lxml.etree.

Estaba buscando sin parar para instalar esto como un requisito para scrapy, e intenté todas las opciones, pero finalmente esto funcionó para mí (mac osx 10.11 python 2.7):

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

La versión anterior de lxml parece funcionar con el módulo etree.

Pip a menudo puede ignorar la versión especificada de un paquete, por ejemplo, cuando tiene la versión más nueva en la caché de pip, por lo tanto, el easy_install. La '-2.7'opción es para la versión de Python, omita esto si está instalando para Python 3.x.

Ryszard Cetnarski
fuente
1

En mi caso, debo cerrar Kaspersky Antivirus antes de instalar lxml:

pip install lxml
aunque
fuente
0

Estoy usando OSX 10.9.2 y obtengo el mismo error.

La instalación de las herramientas de línea de comandos XCode no ayuda para esta versión particular de OSX.

Creo que un mejor enfoque para solucionar esto es instalar con el siguiente comando:

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

Esto es similar a la corrección de jdkoftinoff, pero no altera su sistema de manera permanente.

valo
fuente
0

Me encontré con la misma pregunta y después de días de trabajo resolví este problema en mi OS X 10.9.4, con Python 3.4.1.

Aquí está mi solución.

Según la instalación de lxml desde lxml.de,

Un macport de lxml está disponible. Pruebe algo como port install py25-lxml

Si no tiene MacPort, instálelo desde MacPort.org . Es bastante fácil También puede necesitar un compilador, para instalar las herramientas de compilación de XCode, usexcode-select --install

En primer lugar, actualicé mi puerto a la última versión a través de sudo port selfupdate,

Luego, simplemente sudo port install libxml2escribo y varios minutos más tarde debería ver libxml2 instalado con éxito. Probablemente también deba libxsltinstalar lxml. Para instalar libxslt, utilice: sudo port install libxslt.

Ahora, solo escriba pip install lxml, debería funcionar bien.

Piscis
fuente
0

antes de compilar, agregue la ruta de acceso a xmlversion.h en su entorno.

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

Pero asegúrese de que la ruta que proporcioné tenga el archivo xmlversion.h ubicado dentro. Luego,

$ python setup.py install
knittledan
fuente
0

Después de rasgar mucho el cabello y rechinar los dientes, desinstalé xcode con pip y corrí:

easy_install lxml

Y todo estuvo bien.

duhaime
fuente
-1

Tratar:

% STATIC_DEPS=true pip install lxml

O:

% STATIC_DEPS=true sudo pip install lxml

¡Funciona!

Geek4IT
fuente
Duplicado de la respuesta de Andre.
Kar