Не могу установить lxml в python2.7

Я пытаюсь установить lxml в virtualenv с sudo pip install lxml, а также sudo pip install --upgrade lxml, но в обоих случаях получаю следующее:

x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,
relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes    
-D_FORTIFY_SOURCE=2 -g -fstack-protector --param=ssp-buffer-size=4 -Wformat 
-Werror=format-security build/temp.linux-x86_64-2.7/src/lxml/lxml.etree.o -lxslt 
-lexslt -lxml2 -lz -lm -o build/lib.linux-x86_64-2.7/lxml/etree.so

/usr/bin/ld: cannot find -lz

collect2: error: ld returned 1 exit status
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

----------------------------------------
Cleaning up...
Command /usr/bin/python -c "import setuptools, 
tokenize;__file__='/tmp/pip_build_root/lxml/setup.py';
exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), 
__file__, 'exec'))" install --record /tmp/pip-nmFOYf-record/install-record.txt 
--single-version-externally-managed --compile failed with error code 1 in 
/tmp/pip_build_root/lxml
Storing debug log for failure in /root/.pip/pip.log

Я пробовал все опубликованные решения здесь, что означает, что у меня есть libxml2-dev, libxslt-dev и python-dev установлен, и я также установил build-essential
В настоящее время я использую Linux Mint 17 на основе Debian, который использует apt-get в качестве менеджера пакетов.
python-lxml уже был предустановлен.


person helado    schedule 14.10.2014    source источник
comment
Почему вы используете sudo в virtualenv? Вы создали virtualenv как root? Если да, то почему? Или вы пытаетесь установить его в системные сайт-пакеты, даже если вы находитесь внутри virtualenv? Если да, то почему бы не сделать это из-за пределов virtualenv?   -  person abarnert    schedule 15.10.2014
comment
@abarnert Ну, в первый раз, когда я сделал это без sudo, я попытался установить lxml глобально, но это не сработало.   -  person helado    schedule 15.10.2014
comment
Просто случайное смешивание virtualenv и глобальных установок с sudo и без него просто приведет к сломанному virtualenv с испорченными разрешениями. Не делай этого.   -  person abarnert    schedule 15.10.2014
comment
К вашему сведению, вам не нужно редактировать свой заголовок, чтобы сказать, что проблема решена. Достаточно просто отметить принятый ответ (что вы и сделали).   -  person nhinkle    schedule 15.10.2014
comment
Кроме того, в будущем при проблемах, связанных с установкой, пожалуйста, указывайте информацию о вашей платформе в своем вопросе, в идеале в виде тега. Если бы у вас изначально был тег Linux Mint, я мог бы просто сказать вам sudo apt-get install zlib1g-dev вместо того, чтобы пытаться объяснить абстрактно, что вам нужно использовать установщик вашей платформы для установки пакета разработки zlib для вашей платформы.   -  person abarnert    schedule 15.10.2014
comment
@abarnert Спасибо за совет, буду иметь в виду   -  person helado    schedule 15.10.2014


Ответы (2)


lxml зависит от различных библиотек C, и вам необходимо установить эти библиотеки C, включая их файлы разработки (заголовки, библиотеки .so или .a и т. д.), для сборки lxml. В документах по установке объясняется, какие предварительные условия необходимы для сборки на вашей конкретной платформе.


Эта ошибка:

/usr/bin/ld: cannot find -lz

… означает, что вам не хватает обязательного условия — libz, также известного как zlib.

Поскольку у вас не Windows, невероятно маловероятно, что у вас вообще нет zlib… но вполне вероятно, что у вас нет файлов разработки для zlib. На некоторых платформах, особенно во многих дистрибутивах Linux, пакеты обычно разбиваются на отдельные части. Например, части zlib, необходимые во время выполнения, могут находиться в пакете с именем zlib, а части, необходимые для создания других программ, которым требуется zlib, — в пакете с именем zlib-dev или zlib-devel. Точные данные зависят от вашей конкретной платформы.

При этом, если у вас нет файлов разработки zlib, у вас, вероятно, также нет файлов разработки libxml2 или libxslt, потому что я не знаю ни одной платформы, установка которой не привела бы к установке файлов zlib. также.

В любом случае, поскольку вы не сказали нам, на какой платформе вы работаете (и дистрибутиве, если Linux), я не знаю, какой менеджер пакетов использовать, как называются пакеты и т. д., но делайте все, что подходит для ваша платформа.


Также:

У меня уже установлено python-lxml

Вам действительно не следует устанавливать один и тот же пакет с помощью менеджера пакетов вашего дистрибутива и с помощью pip; это отличный способ запутать себя.

Но в любом случае, скорее всего, вы установили python-lxml из бинарного пакета, а не из исходников, а значит, требования к сборке вам не понадобились. Теперь вы пытаетесь собрать его из исходного кода, что означает, что вы это делаете.

person abarnert    schedule 14.10.2014
comment
Спасибо за ваш ранний ответ, причина, по которой я пытался установить как с pip, так и с менеджером пакетов (то есть apt-get), заключается в том, что первый (pip) у меня не работал, поэтому я попытался установить python-lxml, но он был предустановлен . Также я установил libxml2 и libxslt до того, как попытался установить lxml. - person helado; 15.10.2014
comment
@helado: Но установили ли вы libxml2-dev и libxslt-dev, как объясняют и документы по установке, и этот ответ? - person abarnert; 15.10.2014
comment
Если вы имеете в виду под sudo apt-get install libxml2-dev libxslt-dev python-dev, как сказано в документах, то да, я так и сделал. - person helado; 15.10.2014
comment
Впервые столкнулся с этой ошибкой в ​​Debian... Спасибо за помощь! - person ngoue; 18.08.2015

В дистрибутиве Linux на основе Ubuntu вы можете использовать:

sudo apt-get install zlib1g-dev

person helado    schedule 06.07.2015
comment
Я столкнулся с той же проблемой. Эта команда решила проблему. Спасибо @helado и kguest. - person Mohammed; 05.08.2015