Impossible d'installer Lxml sur Mac os x 10.9

234

Je veux installer Lxml pour pouvoir ensuite installer Scrapy.

Lorsque j'ai mis à jour mon Mac aujourd'hui, il ne me permettait pas de réinstaller lxml, j'obtiens l'erreur suivante:

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

J'ai essayé d'utiliser brew pour installer libxml2 et libxslt, tous deux installés correctement mais je ne peux toujours pas installer lxml.

La dernière fois que j'installais, j'avais besoin d'activer les outils de développement sur Xcode, mais depuis sa mise à jour vers Xcode 5, il ne me donne plus cette option.

Quelqu'un sait-il ce que je dois faire?

David O'Regan
la source
3
PS: je recommande d'utiliser: pip3.4 install lxmlou les STATIC_DEPS=true pip3.4 install lxmlcommandes si vous ciblez une installation spécifique pour Python3 (adaptez-vous à votre version, bash TAB est votre ami); afin que vous installiez pour la version spécifique de votre programme cible qui utilise cette / ces bibliothèques. Sinon, il est facile de passer 30 minutes à installer la bibliothèque pour le mauvais interprète ;-)
Phil L.
3
Assurez-vous de marquer la bonne réponse comme solution pour que les autres puissent utiliser votre question comme guide lorsqu'ils ont le même problème :)
Parker

Réponses:

500

Vous devez installer ou mettre à niveau l'outil de ligne de commande pour xcode. Essayez ceci dans un terminal:

xcode-select --install
tinylee
la source
24
J'obtiens «Impossible d'installer le logiciel car il n'est pas actuellement disponible sur le serveur de mise à jour logicielle».
kelorek
7
Il convient de noter que vous semblez obtenir «Impossible d'installer le logiciel car il n'est pas actuellement disponible sur le serveur de mise à jour de logiciels». lorsque les outils sont déjà installés.
wombat
Quelques notes sur la façon de vérifier manuellement si elles sont installées - stackoverflow.com/a/20834890/255961
studgeek
1
Fonctionne bien sur 10.10.3. Je ne sais pas pourquoi les autres doivent manipuler les cflags.
Eric Chen
1
Et travaillé pour moi après la mise à niveau vers El Capitan (10.11).
Łukasz
193

J'ai résolu ce problème sur Yosemite en installant et en liant libxml2et libxslten brasse:

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

Si vous avez résolu le problème en utilisant cette méthode mais qu'elle réapparaît plus tard, vous devrez peut-être l'exécuter avant les quatre lignes ci-dessus:

brew unlink libxml2
brew unlink libxslt

Si vous rencontrez des erreurs d'autorisation avec Homebrew, en particulier sur El Capitan, ceci est un document utile . En substance, quelle que soit la version d'OS X, essayez d'exécuter:

sudo chown -R $(whoami):admin /usr/local
Markus Amalthea Magnuson
la source
24
La réponse la plus utile. C'est incroyable de voir comment le xcode-select obtient autant de votes. Si vous utilisez brew, vous avez déjà fait la sélection de code ou installé xcode il y a longtemps.
Marcos Eliziário Santos
5
@ MarcosEliziárioSantos Le mot "installer" dans xcode-select --installest un peu trompeur. J'ai constaté qu'après la mise à niveau de Mavericks vers Yosemite, je devais exécuter à xcode-select --installnouveau la mise à niveau vers les outils de ligne de commande de Yosemite. Cela résolvait (partiellement) les problèmes que je rencontrais et, en tout cas, il serait inoffensif de fonctionner de manière redondante.
Noach Magedman
2
@ MarcosEliziárioSantos probablement parce que la meilleure réponse a résolu le problème pour la plupart des gens. Cette solution a fonctionné comme solution de contournement, mais j'ai rencontré des problèmes similaires avec libmemcache quelques secondes plus tard. La meilleure réponse a résolu le problème. Tout le monde ne devrait envisager cette méthode qu'après avoir essayé la première réponse en premier.
Rafal Es
@ MarcosEliziárioSantos encore une chose - J'utilise brew mais c'était une nouvelle installation (je n'avais que XCode installé via AppStore, ce qui est suffisant pour installer homebrew).
Rafal Es
De plus, Homebrew ruine toujours mes autorisations. J'ai utilisé la solution Xcode.
sudo
102

Vous pouvez résoudre votre problème en exécutant ceci sur la ligne de commande:

 STATIC_DEPS=true pip install lxml

Cela m'a bien sûr aidé. Explications sur les documents

André Augusto
la source
Merci beaucoup. Cela m'a fait gagner énormément de temps.
lukecampbell
Fonctionne correctement sur OSX 10.9.5
user9869932
Merci! Fonctionne bien sur macOS 10.14
jolvera
48

J'ai essayé la plupart des solutions ci-dessus, mais aucune n'a fonctionné pour moi. J'utilise Yosemite 10.10, la seule solution qui a fonctionné pour moi a été de taper ceci dans le 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: Si vous utilisez virtualenv, le sudo au début n'est pas nécessaire.

robinsj
la source
1
Cette solution fonctionne également sur Mavericks! Si vous utilisez virtualenvaucun sudo n'est nécessaire.
Mauro Baraldi
Le mien continue de sortir OSError: [Errno 1] Operation not permitted: '/usr/bin/build'malgré l'exécution de la commande en tant que sudo. Des idées?
PLPeeters
@PLPeeters Quelle version de python utilisez-vous et quelle version du système d'exploitation?
robinsj
Je suis sur la version bêta d'El Capitan (c'est donc 10.11) et j'utilise Python 2.7 pour cela. Je suppose que cela pourrait avoir quelque chose à voir avec El Capitan ...
PLPeeters
Tu es un sauveur. El capitan fonctionne, dans virtualenv aucun sudo nécessaire. Merci!
jacoor
24

Cela me dérange aussi depuis un certain temps. Je ne connais pas assez les internes sur les distutils python, etc., mais le chemin d'inclusion ici est faux. J'ai fait le hack laid suivant pour me retenir jusqu'à ce que les gens de python lxml puissent faire le correct correct.

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
la source
19

Installation globale ... 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
la source
1
Cela a fonctionné pour moi, j'ai dû mettre à jour les outils de développement de xcode en utilisant d'abord: xcode-select --install
erickthered
Cela a fait l'affaire. J'avais déjà installé des outils de ligne de commande xcode, mais il semble qu'il fallait les mettre à jour.
Steven Mercatante
12

les instructions d'installation sur http://lxml.de/installation.html expliquent:

Pour accélérer la construction dans des environnements de test, par exemple sur un serveur d'intégration continue, désactivez les optimisations du compilateur C en définissant la variable d'environnement CFLAGS:

CFLAGS="-O0" pip install lxml
panchicore
la source
A fonctionné sans faille pour moi. +1
João Pereira
11

Rien de ce qui précède n'a fonctionné pour moi sur 10.9.2, car la compilation se termine avec l'erreur suivante:

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

Qui mènent réellement à la solution la plus propre (voir plus de détails dans [1]):

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

pip install lxml

ou suivant en cas d'installation mondiale

sudo pip install lxml

[1] erreur de clang: argument inconnu: '-mno-fused-madd' (échec d'installation du package python)

okigan
la source
Merci. cela m'a aidé. les réponses aux souhaits peuvent parfois contenir des méta sur les versions du système d'exploitation.
frankV
Si vous installez globalement , vous devrez peut - être /etc/sudoersavec sudo visudopour préserver les variables d'environnement.
swandog
10
xcode-select --install
sudo easy_install pip
sudo pip install lxml
SouvenirNN
la source
Il est intéressant de noter que certaines personnes avaient besoin de sudol'installation de pip alors que d'autres n'en avaient pas. (J'ai eu des problèmes d'autorisation lors de l'exécution directe de l'installation de pip, et j'ai dû créer sudo.) Je ne peux que supposer que j'ai installé quelque chose lié à python en tant que root dans un passé lointain, ce qui a créé certains dossiers (système) en tant que root au lieu de moi-même.
Noach Magedman
Cela a fonctionné pour moi, je venais de configurer un nouveau mac pour le travail et même si j'ai installé XCode, je suppose qu'il n'a pas installé les outils de ligne de commande? Quoi qu'il en soit, en exécutant cela, en lui faisant installer les outils et en réexécutant simplement 'pip3.4 install lxml --user', aucun sudo ou EXPORTATION de variables de shell.
mgrandi
Cela a parfaitement fonctionné sur Yosemite dans un virtualenv. sudoMais je n'en avais pas besoin .
nils
@NoachMagedman J'installe dans un environnement virtuel, donc je ne peux pas utiliser sudo. Si j'utilisais sudo, il l'installerait dans mes packages python globaux, ce que j'essaye d'éviter.
Esteban
6

J'ai résolu ce problème Yosemiteen exécutant les commandes suivantes:

xcode-select install #this may take several minutes.
pip install lxml
holys
la source
J'en avais assez de homebrew créant un désordre embrouillé de choses sur mon ancien système, donc j'ai juré de ne pas l'utiliser avec ma nouvelle configuration Yosemite 10.10.2. J'ai déjà installé l'ensemble du package Xcode, donc pas besoin xcode-select installde moi. J'ai téléchargé les derniers packages libxml2 et libxlst (requis pour lxml), mais avant de les installer, j'ai pensé vérifier si Yosemite avait déjà ces fichiers quelque part. J'ai créé un env virtuel (en utilisant virtualenvwrapper), puis je l'ai fait pip install lxml, et lxml a installé sans erreur. J'ai testé lxml en grattant la page d'accueil de Google, et cela a bien fonctionné.
7stud
4

Avec homebrew, libxml2 est caché pour ne pas interférer avec le système libxml2, donc pip doit être un peu aidé pour le trouver.

Avec bash:

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

Avec du poisson:

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

J'ai essayé toutes les réponses sur cette page, aucune d'entre elles n'a fonctionné pour moi. J'utilise OS X version 10.9.2

Mais cela fonctionne définitivement ... comme un charme:

ARCHFLAGS = -Wno-error = argument-de-ligne-de-commande-error-hard-error-in-future pip install lxml

Hexatonique
la source
1
Cela désactive simplement les erreurs matérielles pour les arguments inutilisés, que j'ai rencontrées lors de nombreuses autres compilations de bibliothèques sur OS X Mavericks. J'ai trouvé utile d'ajouter la ligne à mon profil bash, donc je n'ai pas à la rechercher à chaque fois que je le rencontre: export ARCHFLAGS="-Wno-error=unused-command-line-argument-hard-error-in-future"ou vous pouvez ajouter des types d'architecture explicitement comme ceci:export ARCHFLAGS="-arch x86_64 -arch i386 -Wno-error=unused-command-line-argument-hard-error-in-future"
Michiel Kauw-A-Tjoe
2

Malheureusement, cela xcode-select --installn'a pas fonctionné pour moi car j'avais déjà la dernière version.

C'est très étrange mais j'ai résolu le problème en ouvrant XCode et en acceptant les conditions générales. La réexécution pip install lxmln'a renvoyé aucune erreur après.

Adam Sheridan
la source
1

Après une installation réussie à partir de pip (lxml 3.6.4), j'obtenais une erreur lors de l'importation du module lxml.etree.

Je cherchais sans cesse à l'installer comme condition requise pour scrapy, et j'ai essayé toutes les options, mais finalement cela a fonctionné pour moi (mac osx 10.11 python 2.7):

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

L'ancienne version de lxml semble fonctionner avec le module etree.

Pip peut souvent ignorer la version spécifiée d'un package, par exemple lorsque vous avez la version la plus récente dans le cache pip, donc le easy_install. L' '-2.7'option est pour la version python, omettez-la si vous installez pour python 3.x.

Ryszard Cetnarski
la source
1

Dans mon cas, je dois arrêter Kaspersky Antivirus avant d'installer lxml en:

pip install lxml
Tho
la source
0

J'utilise OSX 10.9.2 et j'obtiens la même erreur.

L'installation des outils de ligne de commande XCode n'aide pas pour cette version particulière d'OSX.

Je pense qu'une meilleure approche pour résoudre ce problème consiste à installer avec la commande suivante:

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

Ceci est similaire au correctif de jdkoftinoff, mais ne modifie pas votre système de manière permanente.

valo
la source
0

J'ai rencontré la même question et après des jours de travail, j'ai résolu ce problème sur mon OS X 10.9.4, avec Python 3.4.1.

Voici ma solution,

Selon l' installation de lxml à partir de lxml.de,

Un macport de lxml est disponible. Essayez quelque chose comme l'installation du port py25-lxml

Si vous n'avez pas MacPort, installez-le à partir de MacPort.org . C'est assez simple. Vous pouvez également avoir besoin d'un compilateur, pour installer les outils de compilation XCode, utilisezxcode-select --install

Tout d'abord, j'ai mis à jour mon port vers la dernière version via sudo port selfupdate,

Ensuite, je tape juste sudo port install libxml2et quelques minutes plus tard, vous devriez voir que libxml2 est installé avec succès. Vous devrez peut-être également libxsltinstaller lxml. Pour installer libxslt, utilisez: sudo port install libxslt.

Maintenant, tapez simplement pip install lxml, cela devrait fonctionner correctement.

Poissons
la source
0

avant de compiler, ajoutez le chemin d'accès à xmlversion.h dans votre environnement.

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

Mais assurez-vous que le chemin que j'ai fourni contient le fichier xmlversion.h situé à l'intérieur. Ensuite,

$ python setup.py install
knittledan
la source
0

Après beaucoup de déchirure des cheveux et des grincements de dents, j'ai désinstallé xcode avec pip et j'ai couru:

easy_install lxml

Et tout allait bien.

duhaime
la source
-1

Essayer:

% STATIC_DEPS=true pip install lxml

Ou:

% STATIC_DEPS=true sudo pip install lxml

Ça marche!

Geek4IT
la source
Duplicata de la réponse d'André.
Kar