Почему я не могу заставить "pip install lxml" работать в virtualenv?
Примечание: я использую virtualenvwrapper.
перед активацией виртуальной среды:
$ pip install lxml
Requirement already satisfied (use --upgrade to upgrade): lxml in /usr/lib/python2.7/dist-packages
Cleaning up...
после активации виртуальной среде:
(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
4 ответа:
у вас, вероятно, уже установлен lxml в вашей системе, возможно, установлен из-за системного пакета. Таким образом, первая попытка (
pip install lxml
без активного virtualenv) не терпит неудачу, но он также не устанавливает его; он действительно ничего не делает.в virtualenv по умолчанию системные пакеты игнорируются. Поэтому pip считает, что lxml не установлен. Поэтому он пытается установить его в виртуальную среду.
lxml содержит модули C, которые должны быть скомпилированы для правильной установки. Однако компиляция этих модулей C зависит от того, что у вас уже установлены некоторые "библиотеки разработки". Эти библиотеки разработки являются библиотеками C, а не Python, и поэтому pip не сможет автоматически извлекать их из интернета и устанавливать их для вас.
поэтому вам нужно будет установить эти библиотеки разработки самостоятельно, скорее всего, с помощью диспетчера пакетов. В системе Debian (например, Ubuntu), это есть...
apt-get install libxml2-dev libxslt-dev
это установит библиотеки разработки libxml2 и libxslt в вашей локальной системе. Если вы попытаетесь снова установить lxml, шаг компиляции модуля C должен работать, потому что теперь эти библиотеки разработки находятся в вашей системе.
сообщение об ошибке, которое вы получали, было связано с тем, что эти библиотеки отсутствовали (
libxml/xmlversion.h: No such file or directory
часть сообщения об ошибке).Читайте также: Как установить lxml на Ubuntu
для пользователей centos: при получении:
ошибка: команда ' gcc ' завершилась неудачно со статусом выхода 1
DO:
sudo yum install libxslt-devel libxml2-devel
если у вас
lxml
установлен на системном уровне, и вы хотите перенести его вvirtualenv
что вы не создали с--system-site-packages
, вы можете символически связать его в свойvirtualenv
' sdist-packages
папка.за пределами
virtualenv
, в оболочке python:import lxml print lxml.__file__
в моем случае, он находится в
/usr/lib/python2.7/dist-packages
. Там будет папка lxml и файл egg-info. Где бы ни находился ваш virtualenv, заходите в его/lib/python-x.y/dist-packages
папка (возможно, Вам потребуется создатьdist-packages
), и символическая ссылка на папку библиотеки и яйцо в него.
вы, скорее всего, ищете это: требуется Microsoft Visual C++ 14.0 (не удается найти vcvarsall.летучая мышь)
найдите веб-сайт visual studio и перейдите в раздел: "Инструменты для visual studio" в нижней части разверните его, щелкнув. Выберите Загрузить рядом с "Build Tools for Visual Studio 2017" вверху.