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