python - tutorial - sam max venv




Pourquoi ne puis-je obtenir `pip install lxml` pour travailler dans un virtualenv? (2)

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

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 votre virtualenv se trouve, allez dans son dossier /lib/python-xy/dist-packages (vous devrez peut-être créer des dist-packages ), et créez un lien symbolique entre le dossier de la bibliothèque et l'oeuf.

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 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 installé en raison d'un paquetage système. Ainsi, la première tentative ( pip install lxml sans virtualenv actif) n'échoue pas, mais elle ne l'installe pas non plus; ça 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 pouvoir être installés correctement. Cependant, la compilation de ces modules C repose sur l'installation de bibliothèques de développement déjà installées. Ces bibliothèques de développement sont des bibliothèques C, pas Python, et en tant que tel, PIP ne sera pas capable 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 par vous-même, 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 libxml/xmlversion.h: No such file or directory était dû au fait que ces bibliothèques manquaient ( libxml/xmlversion.h: No such file or directory partie du message d'erreur).

Voir aussi: Comment installer lxml sur Ubuntu





virtualenvwrapper