"ошибка: команда 'x86_64-linux-gnu-gcc' завершилась неудачно с состоянием выхода 1" в virtualenv

Окружающая среда: Linux Mint 17 Cinnamon.

Эта ошибка отображается:

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

при попытке следующего в virtualenv:

pip install lxml
pip install pillow
pip install pycrypto
pip install pymongo (fails but still shows in pip freeze)

Здесь есть несколько решений, которые рекомендуют установить python2.7-dev:

Ошибка установки подушки: Сценарий установки завершился с ошибкой: команда 'x86_64-linux-gnu-gcc' завершилась неудачно с состоянием выхода 1

Установка lxml в virtualenv с помощью ошибки установки pip: команда 'x86_64-linux-gnu-gcc' завершилась неудачно

Ошибка установки подушки: команда 'gcc' завершилась неудачно с состоянием выхода 1

фатальная ошибка: Python.h: нет такого файла или каталога

Однако я смущен этой рекомендацией, потому что, насколько я понимаю, я использую что-то вроде:

sudo apt-get install python2.7-dev

добавил бы это к основному * системному * экземпляру Python, а не к virtualenv, (см. /questions/48176128/kogda-nih-protiv-razumnogo-vlozheniya-vremeni/48176171#48176171).

Можно добавить python2.7-dev только к virtualenv версия Python?

9 ответов

Решение

Я установил python2.7-dev через менеджер пакетов Synaptic в Linux Mint 17.

Затем я мог бы выполнить следующее в virtualenv:

pip install pillow
pip install pycrypto

А потом я установил libxml2-dev а также libxslt1-dev через Synaptic и может выполнить следующее:

pip install lxml

Я также сделал это, чтобы при установке pymongo не было ошибок:

pip uninstall pymongo
pip install pymongo  # i defined the version i needed ie pip install pymongo==2.6.2

Я все еще не понимаю, как это решает проблему, потому что я думал virtualenv была изолированная среда. Любые разъяснения по этому поводу приветствуются.

В большинстве случаев это проблемы зависимости.

Следуя стековой трассировке компилятора gcc, можно увидеть отсутствующие файлы. Иногда установки пакетов разработки Python недостаточно.

Например: я пытался сделать pip install requests[security] в моем добродетели фу. Это результат, который мне дал пип-инсталлятор.

Failed building wheel for cryptography
Running setup.py bdist_wheel for cffi
Stored in directory: /root/.cache/pip/wheels/99/e7/9a/68b1c8ca6f6f92b5feebd4d9434f50712b84f6a66d1285ea21
Successfully built cffi
Failed to build cryptography
Installing collected packages: cffi, cryptography, pyOpenSSL, ndg-httpsclient, requests
Running setup.py install for cryptography
Complete output from command /opt/foo/django-cms-virtualenv/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip-build-eZaLAG/cryptography/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-BwgYTp-record/install-record.txt --single-version-externally-managed --compile --install-headers /opt/foo/django-cms-virtualenv/include/site/python2.7/cryptography:
running install
running build
running build_py
running egg_info
writing requirements to src/cryptography.egg-info/requires.txt
writing src/cryptography.egg-info/PKG-INFO
writing top-level names to src/cryptography.egg-info/top_level.txt
writing dependency_links to src/cryptography.egg-info/dependency_links.txt
writing entry points to src/cryptography.egg-info/entry_points.txt
warning: manifest_maker: standard file '-c' not found

reading manifest file 'src/cryptography.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
no previously-included directories found matching 'docs/_build'
warning: no previously-included files matching '*' found under directory 'vectors'
writing manifest file 'src/cryptography.egg-info/SOURCES.txt'
running build_ext
building '_Cryptography_cffi_a269d620xd5c405b7' extension
x86_64-linux-gnu-gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c src/cryptography/hazmat/bindings/__pycache__/_Cryptography_cffi_a269d620xd5c405b7.c -o build/temp.linux-x86_64-2.7/src/cryptography/hazmat/bindings/__pycache__/_Cryptography_cffi_a269d620xd5c405b7.o
src/cryptography/hazmat/bindings/__pycache__/_Cryptography_cffi_a269d620xd5c405b7.c:217:25: fatal error: openssl/aes.h: Datei oder Verzeichnis nicht gefunden
 #include <openssl/aes.h>
                         ^
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

Важной частью является: #include <openssl/aes.h>

Компилятор ясно дает понять, что он требует этот файл - но его нет в файловой системе.

Зная это, остается только установить необходимые библиотеки!

  1. Узнайте, какой пакет необходим для вашего дистрибутива: например, для Ubuntu вы можете перейти на сайт поиска пакетов Ubuntu и ввести отсутствующий файл, который вы ищете. В этом случае "aes.h"
  2. Установите необходимые пакеты, используя инструмент управления пакетами дистрибутивов: например, для Ubuntu:

    aptitude install libssl-dev

  3. Повторите с pip в вашем virtualenv:

    pip install requests[security]

Работа для меня:
Просто сначала установите python2.7-dev
sudo apt-get install python2.7-dev

В Ubuntu 16.04.1 это работало для меня:

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

Для меня установка lxml не удалась при компиляции. Я следовал инструкциям по установке lxml и уменьшил оптимизацию компилятора:

sudo CFLAGS="-O0"  pip install lxml

После этого компиляция lxml прошла успешно.

Это может быть проблемой в пипсах. Чтобы решить, попробуйте:

sudo apt-get удалить python-pip

Чтобы установить pip, безопасно загрузите get-pip.py.

https://bootstrap.pypa.io/get-pip.py

sudo python get-pip.py

cffi потребности библиотеки libffi-dev:

sudo apt-get install libffi libffi-dev

Это работает для меня, 12.04, python2.7.6 для пакета lxml

sudo pip install libxml2 libxml2-dev libxslt1-dev
sudo pip install lxml

Самый простой способ это:

sudo apt-get build-dep python-imaging

а потом

pip install pillow
Другие вопросы по тегам