web-dev-qa-db-fra.com

Pourquoi est-ce que je ne parviens pas à installer pip install lxml dans virtualenv?

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
69
Brian Dant

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

124
Mark Hildreth

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
18
elad silver

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 virtualenvdist-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.

5
David Oliver