2015-07-31 4 views
1

Я попытался установить библиотеку python lxml на Ubuntu 14.04, используя pip install lxml.Не удается установить lxml с помощью pip

Это не удалось, и выход был (принес только конец здесь):

... 
... 
... 

src/lxml/lxml.etree.c:8:22: fatal error: pyconfig.h: No such file or directory 

#include "pyconfig.h" 

        ^

compilation terminated. 

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

Я искал проблему и обнаружили, что я должен установить некоторые вещи с помощью:

apt-get install libxml2-dev libxslt-dev libxslt1-dev python-dev

Затем я попытался установить с помощью pip install lxml. Сбой установки снова, теперь с другой ошибкой. Попытка pip --default-timeout=300 install lxml ничего не изменила.

Новая ошибка:

... 
... 
... 

creating build/temp.linux-x86_64-2.7/src/lxml 

x86_64-linux-gnu-gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/libxml2 -I/tmp/pip_build_root/lxml/src/lxml/includes -I/usr/include/python2.7 -c src/lxml/lxml.etree.c -o build/temp.linux-x86_64-2.7/src/lxml/lxml.etree.o -w 

x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -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-PVygtI-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 

Дополнительная информация из /root/.pip/pip.log файла:

Exception information: 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main 
    status = self.run(options, args) 
    File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 283, in run 
    requirement_set.install(install_options, global_options, root=options.root_path) 
    File "/usr/lib/python2.7/dist-packages/pip/req.py", line 1436, in install 
    requirement.install(install_options, global_options, *args, **kwargs) 
    File "/usr/lib/python2.7/dist-packages/pip/req.py", line 707, in install 
    cwd=self.source_dir, filter_stdout=self._filter_install, show_stdout=False) 
    File "/usr/lib/python2.7/dist-packages/pip/util.py", line 715, in call_subprocess 
    % (command_desc, proc.returncode, cwd)) 
InstallationError: 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-Jj2y9w-record/install-record.txt --single-version-externally-managed --compile failed with error code 1 in /tmp/pip_build_root/lxml 

Однако, я могу установить LXML по apt-get install python-lxml, а также установить локально после загрузки вручную с сайта LXML, но я хотите установить с помощью pip.

+1

«/ usr/bin/ld: не удается найти -lz»: вам, вероятно, также потребуется установить zlib. См. Также, например. http://stackoverflow.com/questions/3373995/usr-bin-ld-cannot-find-lz или http://askubuntu.com/questions/377000/compilation-error-usr-bin-ld-cannot-find- lz. – Evert

ответ

5

Эта ошибка ...

/usr/bin/ld: cannot find -lz 

... предполагает, что вы также должны установить zlib1g-dev:

apt-get install zlib1g-dev 

lxml Модуль имеет достаточно большое количество зависимостей. Часто гораздо проще использовать ту, которая предоставляется диспетчером системных пакетов, если только вам не нужна функция, доступная только в том случае, если вы создаете исходный код.

В общем, для такого рода ошибок вам необходимо найти пакет, который предоставляет отсутствующую общую библиотеку. Это будет lib<SOMETHING>.so, где <SOMETHING> - это то, что следует за сообщением об ошибке -l.

Вы можете использовать команду apt-file, чтобы помочь найти подходящий пакет. Например:

# apt-file search libz.so 
lib32z1: /usr/lib32/libz.so.1 
lib32z1: /usr/lib32/libz.so.1.2.8 
lib32z1-dev: /usr/lib32/libz.so 
libx32z1: /usr/libx32/libz.so.1 
libx32z1: /usr/libx32/libz.so.1.2.8 
libx32z1-dev: /usr/libx32/libz.so 
zlib1g: /lib/x86_64-linux-gnu/libz.so.1 
zlib1g: /lib/x86_64-linux-gnu/libz.so.1.2.8 
zlib1g-dev: /usr/lib/x86_64-linux-gnu/libz.so 

Последняя запись в списке есть для .../libz.so, предусмотренных zlib1g-dev пакета.

+0

Спасибо! Очень полезная информация! Если у меня снова будет такая ошибка, я уверен, что буду знать, как с этим справиться :) –

Смежные вопросы