Remarque: 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 avoir activé 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('\r\n', '\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
Vous avez probablement déjà installé lxml sur votre système, peut-être en raison d’un paquet système. Ainsi, la première tentative (pip install lxml
sans virtualenv actif) n'échoue pas, mais il ne l'installe pas non plus; ça ne fait vraiment rien.
Dans une virtualenv, par défaut, les packages système sont ignorés. Par conséquent, pip pense que LXML n'est pas installé. Par conséquent, il tente de l'installer dans votre environnement virtuel.
lxml contient des modules C qui doivent être compilés pour s’installer correctement. Cependant, la compilation de ces modules C suppose que vous disposiez également de "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 pourra pas les récupérer automatiquement sur Internet et les installer pour vous.
Par conséquent, vous devrez installer ces bibliothèques de développement vous-même, probablement à l'aide de 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 se trouvent maintenant sur votre système.
Le message d'erreur que vous avez reçu était dû au fait que ces bibliothèques étaient manquantes (le libxml/xmlversion.h: No such file or directory
partie du message d'erreur).
Voir aussi: Comment installer lxml sur Ubunt
pour les utilisateurs centos: en obtenant:
erreur: la commande 'gcc' a échoué avec le statut de sortie 1
FAIRE:
Sudo yum install libxslt-devel libxml2-devel
Si vous avez lxml
installé au niveau du système et que vous souhaitez le migrer vers un virtualenv
que vous n'avez pas créé avec --system-site-packages
, vous pouvez le connecter par un lien symbolique. votre dossier virtualenv
dist-packages
.
En dehors de votre virtualenv
, dans un python Shell:
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 devrez peut-être créer dist-packages
), et lier de façon symétrique le dossier de la bibliothèque et Egg.