Pourquoi je ne peux pas obtenir `pip install lxml` pour fonctionner dans un virtualenv?

Note: j'utilise virtualenvwrapper.

avant d'activer l'environnement virtuel:

$ pip install lxml
Requirement already satisfied (use --upgrade to upgrade): lxml in /usr/lib/python2.7/dist-packages  
Cleaning up...  

après activation de l'environnement virtuel:

(test-env)$ pip install lxml
force/build/lxml/src/lxml/includes/etree_defs.h:9:31: fatal error: 
libxml/xmlversion.h: No such file or directory

compilation terminated.

error: command 'gcc' failed with exit status 1

----------------------------------------
Command /home/chaz/dev/envs/test-with-system-python-force/bin/python2
.7 -c "import setuptools;__file__='/home/chaz/dev/envs/test-with-
system-python-force/build/lxml/setup.py';exec(compile(open(__file__).
read().replace('rn', 'n'), __file__, 'exec'))" install --record 
/tmp/pip-bJ6Q_B-record/install-record.txt --single-version-externally
-managed --install-headers /home/chaz/dev/envs/test-env/include/site/python2.7 failed with error code 1 in 
/home/chaz/dev/envs/test-env/build/lxml
Storing complete log in /home/chaz/.pip/pip.log
63
demandé sur Brian Dant 2012-10-23 01:11:10

4 réponses

vous avez probablement déjà lxml installé sur votre système, peut-être à cause d'un paquet système. Ainsi, la première tentative ( pip install lxml sans virtualenv actif) n'échoue pas, mais elle ne l'installe pas non plus; elle ne fait vraiment rien.

dans un virtualenv, par défaut, les paquets système sont ignorés. Par conséquent, pip pense que lxml n'est pas installé. Par conséquent, il essaie de l'installer dans votre environnement virtuel.

lxml contient des modules C qui doivent être compilés pour être installés correctement. Cependant, la compilation de ces modules C repose sur le fait que vous avez déjà installé des "bibliothèques de développement". Ces bibliothèques de développement sont des bibliothèques C, Pas Python, et en tant que tel pip ne sera pas en mesure de les récupérer automatiquement sur internet et de les installer pour vous.

par conséquent, vous devrez installer ces bibliothèques de développement vous-même, très probablement en utilisant votre gestionnaire de paquets. Dans un système Debian (comme Ubuntu), c'est...

apt-get install libxml2-dev libxslt-dev

cela installera les bibliothèques de développement libxml2 et libxslt sur votre système local. Si vous essayez à nouveau d'installer lxml, l'étape de compilation du module C devrait fonctionner car ces bibliothèques de développement sont maintenant sur votre système.

le message d'erreur que vous receviez était dû au fait que ces bibliothèques étaient manquantes (la partie libxml/xmlversion.h: No such file or directory du message d'erreur).

Voir aussi: comment installer lxml sur Ubuntu

115
répondu Mark Hildreth 2017-05-23 12:32:17

pour les utilisateurs de centos: quand obtenir:

erreur: la commande 'gcc' a échoué avec l'état de sortie 1

DO:

sudo yum install libxslt-devel libxml2-devel
18
répondu elad silver 2014-01-14 09:32:53

si vous avez lxml installé au niveau du système, et que vous voulez le migrer dans un virtualenv que vous n'avez pas créé avec --system-site-packages , vous pouvez le faire un lien symbolique dans votre dossier virtualenv 's dist-packages .

en dehors de votre virtualenv , dans un shell python:

import lxml
print lxml.__file__

Dans mon cas, il se trouve dans /usr/lib/python2.7/dist-packages . Il y aura un dossier lxml et un fichier egg-info. Où que soit votre virtualenv, allez dans son dossier /lib/python-x.y/dist-packages (vous aurez peut-être besoin de créer dist-packages ), et d'y lier symboliquement le dossier de la bibliothèque et l'oeuf.

5
répondu David Oliver 2015-01-05 09:49:38

vous êtes très probablement à la recherche de ce: Microsoft Visual C++ 14.0 est requis (impossible de trouver vcvarsall.chauve-souris)

rechercher le site Web de visual studio et aller dans: "Outils pour visual studio" en bas, développez-le en cliquant. Sélectionnez Télécharger à côté de" construire des outils pour Visual Studio 2017 " en haut.

-1
répondu xJustiinsane 2018-07-18 17:24:07