Подтвердить что ты не робот

Ошибка pip: непризнанная опция командной строки '-fstack-protector-strong

Когда я sudo pip install pyquery, sudo pip install lxml и sudo pip install cython, я получаю очень похожий вывод с той же ошибкой, которая говорит:

x86_64-linux-gnu-gcc: error: unrecognized command line option ‘-fstack-protector-strong’

Здесь полный вывод pip для sudo pip install pyquery:

Requirement already satisfied (use --upgrade to upgrade): pyquery in /usr/local/lib/python2.7/dist-packages
Downloading/unpacking lxml>=2.1 (from pyquery)
  Running setup.py egg_info for package lxml
    /usr/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'bugtrack_url'
      warnings.warn(msg)
    Building lxml version 3.4.1.
    Building without Cython.
    Using build configuration of libxslt 1.1.28

Requirement already satisfied (use --upgrade to upgrade): cssselect in /usr/local/lib/python2.7/dist-packages/cssselect-0.9.1-py2.7.egg (from pyquery)
Installing collected packages: lxml
  Running setup.py install for lxml
    /usr/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'bugtrack_url'
      warnings.warn(msg)
    Building lxml version 3.4.1.
    Building without Cython.
    Using build configuration of libxslt 1.1.28
    building 'lxml.etree' extension
    x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I/usr/include/libxml2 -I/root/build/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: error: unrecognized command line option ‘-fstack-protector-strong’
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
    Complete output from command /usr/bin/python -c "import setuptools;__file__='/root/build/lxml/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /tmp/pip-gg4SuG-record/install-record.txt:
    /usr/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'bugtrack_url'

  warnings.warn(msg)

Building lxml version 3.4.1.

Building without Cython.

Using build configuration of libxslt 1.1.28

running install

running build

running build_py

copying src/lxml/includes/lxml-version.h -> build/lib.linux-x86_64-2.7/lxml/includes

running build_ext

building 'lxml.etree' extension

x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I/usr/include/libxml2 -I/root/build/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: error: unrecognized command line option ‘-fstack-protector-strong’

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

----------------------------------------
Command /usr/bin/python -c "import setuptools;__file__='/root/build/lxml/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /tmp/pip-gg4SuG-record/install-record.txt failed with error code 1 in /root/build/lxml
Storing complete log in /root/.pip/pip.log

Полный журнал из /root/.pip/pip.log находится здесь: http://pastebin.com/5R4VZDu8

Я просмотрел этот, этот, этот и этот для справки, но я еще не смог решить проблему.

Я уже установил libxml2-dev, libxslt1-dev и python-dev. Я запускаю Debian 7.0 x64 на капли DigitalOcean.

Я просто пытаюсь установить pyquery. Может кто-нибудь, пожалуйста, помогите мне?

Спасибо

4b9b3361

Ответ 1

Я столкнулся с этой проблемой, когда попытался обновить версию pandas до версии 0.15.2

Если вы установите gcc-4.9, у вас наверняка будет более старая версия gcc в вашей системе (gcc-4.7 в моем случае).

Я могу подумать о трех способах решения этой проблемы:

a) symlink/usr/bin/x86_64-linux-gnu-gcc to /usr/bin/x 86_64-linux-gnu-gcc-4.9 если вы хотите более организованно об этом использовать альтернативы обновлений, см. https://askubuntu.com/questions/26498/choose-gcc-and-g-version

b) выяснить, как вручную указать, какой компилятор компилятора использовать, и установить его в каком-то файле .conf - я не проверял, где находится этот файл, или есть ли опции CLI для pip, которые выполняют эквивалент. В принципе, создание/редактирование/usr/lib/pythonX.Y/distutils/distutils.cfg должно это сделать. У меня возникли проблемы, когда я попытался использовать этот подход.

c) Отредактируйте /usr/lib/python 2.7/plat-x86_64-linux-gnu/_sysconfigdata_nd.py, чтобы отразить обновленный компилятор

Как использовать gcc-компилятор MinGW при установке пакета Python с помощью Pip? https://docs.python.org/2/install/#distutils-configuration-files

Я пошел с быстрым и грязным решением (а), чтобы заставить все работать

[email protected]:/home/user1$ rm /usr/bin/x86_64-linux-gnu-gcc
[email protected]:/home/user1$ ln -s /usr/bin/gcc-4.9 /usr/bin/x86_64-linux-gnu-gcc
[email protected]:/home/user1$ pip install pandas --upgrade
. . .  pandas compiles with gcc-4.9 here . . . 

переместите все на то, как они были

[email protected]:/home/user1$ rm /usr/bin/x86_64-linux-gnu-gcc
[email protected]:/home/user1$ ln -s /usr/bin/gcc-4.7 /usr/bin/x86_64-linux-gnu-gcc

Ответ 2

Одним из возможных решений могло бы быть использование GCC 4.9 или выше, что поддерживает флаг -fstack-protector-strong.

Ответ 3

Вместо обновления до GCC 4.9 я пытался найти, где был определен флаг и удалить его. В Debian Wheezy я нашел его в /usr/lib/python 2.7/plat-x86_64-linux-gnu/_sysconfigdata_nd.py, который принадлежит к пакету libpython2.7-minimal. Мое решение заключалось в замене всех вхождений -fstack-protector-strong с -fstack-protector в этом файле. Затем pip install выполнил правильную команду сборки.