Почему я не могу заставить `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('\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
Ответы
Ответ 1
У вас, вероятно, уже установлен lxml в вашей системе, возможно, установлен из-за системного пакета. Таким образом, первая попытка (pip install lxml
без активного virtualenv) не прерывается, но она также не устанавливает ее; он действительно ничего не делает.
В virtualenv по умолчанию системные пакеты игнорируются. Поэтому pip считает, что lxml не установлен. Поэтому он пытается установить его в вашу виртуальную среду.
lxml содержит C-модули, которые необходимо скомпилировать для правильной установки. Тем не менее, компиляция этих модулей C полагается на то, что у вас уже есть некоторые "библиотеки разработки". Эти библиотеки разработки - это библиотеки C, а не Python, и поскольку такой пип не сможет автоматически извлекать их из Интернета и устанавливать для вас.
Поэтому вам нужно будет самостоятельно установить эти библиотеки разработки, скорее всего, используя ваш диспетчер пакетов. В системе Debian (например, Ubuntu) это...
apt-get install libxml2-dev libxslt-dev
Это установит библиотеки разработки libxml2 и libxslt в вашу локальную систему. Если вы попытаетесь снова установить lxml, шаг компиляции модуля C должен работать, потому что теперь эти библиотеки разработки находятся в вашей системе.
Сообщение об ошибке, которое вы получали, связано с тем, что эти библиотеки отсутствовали (часть сообщения libxml/xmlversion.h: No such file or directory
сообщения об ошибке).
Смотрите также: Как установить lxml на Ubuntu
Ответ 2
для пользователей centos:
при получении:
Ошибка: команда 'gcc' не удалась с статусом выхода 1
DO:
sudo yum install libxslt-devel libxml2-devel
Ответ 3
Если у вас есть lxml
, установленный на системном уровне, и вы хотите перенести его в virtualenv
, который вы не создали с помощью --system-site-packages
, вы можете привязать его в свою папку virtualenv
dist-packages
.
Вне вашего virtualenv
, в оболочке python:
import lxml
print lxml.__file__
В моем случае он найден в /usr/lib/python2.7/dist-packages
. Будет папка lxml и файл с информацией о файлах. Где бы вы ни находились, перейдите в его папку /lib/python-x.y/dist-packages
(возможно, вам нужно будет создать dist-packages
), и вставьте в нее как папку библиотеки, так и яйцо.