Я только что установил Debian 7.4 на свой компьютер. Мне нужен python 3.3.2 или выше И python3-lxml для моих внутренних разработок. Поскольку python 3.2 является базовой линией для серии python3.x в debian wheezy Ive, я скомпилировал версию python 3.4.0 и удалил старую версию 3.2. (обратите внимание, что этот процесс также удалил некоторые зависимости gnome).

После этой работы пакеты Python3 (например, cherrypy) устанавливаются нормально, и модули могут быть успешно импортированы внутри интерпретатора.

При попытке установить python3-lxml системе необходимо установить зависимости репозитория lxml python3.2 ... чего я просто не хочу.

Поэтому я решил скомпилировать lxml поверх python 3.4.0.

Установленные зависимости: * libxml2> = 2.7.8 * libxml2-dev * libxslt1 => = 1.1.26 * libxslt1-dev

sudo apt-get install  libxml2 libxml2-dev libxslt1 libxslt1-dev

Я думаю, нужны только пакеты * -dev, не так ли?

Проблема в том, что я столкнулся с этой проблемой при компиляции в исходном каталоге:

jeby6372@mercure:~/Pack/lxml-3.3.4$ sudo python3 setup.py build
Building lxml version 3.3.4.
Building without Cython.
Using build configuration of libxslt 1.1.26
Building against libxml2/libxslt in the following directory: /usr/lib
/opt/python-3.4.0/lib/python3.4/distutils/dist.py:260: UserWarning: Unknown distribution option: 'bugtrack_url'
  warnings.warn(msg)
running build
running build_py
copying src/lxml/includes/lxml-version.h -> build/lib.linux-x86_64-3.4/lxml/includes
running build_ext
building 'lxml.etree' extension
gcc -pthread -Wno-unused-result -Werror=declaration-after-statement -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/include/libxml2 -I/home/jeby6372/Pack/lxml-3.3.4/src/lxml/includes -I/opt/python-3.4.0/include/python3.4m -c src/lxml/lxml.etree.c -o build/temp.linux-x86_64-3.4/src/lxml/lxml.etree.o -w
gcc -pthread -shared build/temp.linux-x86_64-3.4/src/lxml/lxml.etree.o -L/usr/lib -lxslt -lexslt -lxml2 -lz -lm -o build/lib.linux-x86_64-3.4/lxml/etree.cpython-34m.so
/usr/bin/ld: cannot find -lz
collect2: error: ld returned 1 exit status
error: command 'gcc' failed with exit status 1

Параметр -lz не распознается gcc. Для информации я установил цепочку инструментов с помощью:

sudo apt-get install build-essential

Любая идея ?

Заранее благодарю за помощь.

3
Emmanuel BRUNET 7 Апр 2014 в 20:38

2 ответа

Лучший ответ

Компоновщик не может найти libz при попытке скомпилировать c-расширение python. Я считаю, что вам нужен пакет zlib dev в Debian. Попробуйте apt-get install zlib1g-dev, а затем попробуйте восстановить.

2
photoionized 7 Апр 2014 в 20:03

Вы правы фотоионизированы,

При установке другого пакета (setuptools) он утверждает, что модуль zlib python должен быть установлен во время компиляции. Не знаю, почему, но я подумал, что это та же проблема, что и параметр unknown -lz, который звучит как Library Zlib ?

Итак, я установил библиотеку zlib1g и ее исходники, снова скомпилировал python-3.4.0 с параметром --with-zlib .

./compile --prefix=opt/python-3.4.0 --with-zlib
make
sudo make install

Затем создайте новую ссылку на команду

sudo rm /usr/bin/python3 && ln -s /usr/bin/python3 /opt/python-3.4.0/bin/python3.4m

После этого установка успешно завершилась в исходном каталоге lxml.

sudo python3 setup.py install

Еще раз спасибо за ваш ответ

0
Emmanuel BRUNET 8 Апр 2014 в 18:07