Почему этот пакет Python пытается использовать несуществующий gcc?


8

Я пытаюсь установить PyCrypto для Python 3 на Solaris. Независимо от того, делаю ли я это с помощью « python3 setup.py install» или « pip3 install pycrypto», я сталкиваюсь с одной и той же проблемой: делается вызов gcc, который не существует:

python3 setup.py install
[...]
/opt/csw/bin/gcc-4.8 -pipe -m32 -march=pentiumpro -Wno-unused-result -fwrapv -Wall -Wstrict-prototypes -pipe -m32 -march=pentiumpro -I/usr/include/gmp -fPIC -std=c99 -O3 -fomit-frame-pointer -Isrc/ -I/usr/include/ -I/opt/csw/include/python3.3m -c src/_fastmath.c -o build/temp.solaris-2.11-i86pc.32bit-3.3/src/_fastmath.o
unable to execute /opt/csw/bin/gcc-4.8: No such file or directory

Теперь я ничего не знаю об истории машины, на которой я нахожусь. Возможно, что /opt/csw/bin/gcc-4.8 существовал когда-то в прошлом. Но это больше не так. export CC=/usr/bin/gcc (или какой-то другой gcc) НЕ решает проблему - без ошибок вызывается /opt/csw/bin/gcc-4.8.

Меня меньше интересует установка PyCrypto и больше интересует понимание ПОЧЕМУ этот фиктивный вызов сделан с самого начала. Где сохраняется значение "/opt/csw/bin/gcc-4.8"? Как / где система вообще получает информацию, чтобы думать, что ей нужно вызвать этот компилятор?

Единственное, о чем я могу думать, - это то, что Python3 изначально был скомпилирован с /opt/csw/bin/gcc-4.8, а Python3 постоянно его где-то записывает, и /opt/csw/bin/gcc-4.8 - это компилятор, который используется для компилировать вещи. Если это так, то лучше ли мне удалить и переустановить Python3, чтобы избавиться от этой ошибочной зависимости?


Я предполагаю, что это может иметь какое-то отношение distutils? Также смотрите: stackoverflow.com/questions/5967065/…
jmunsch

1
Я предлагаю указатель на источник? В качестве альтернативы посмотрите или вставьте setup.pyдля начала.
Фахим Митха

Содержимое setup.py здесь: github.com/dlitz/pycrypto/blob/master/setup.py Нет прямой ссылки на gcc. Но «build» является частью «distutils», поэтому, возможно, @jmunsch движется в правильном направлении.
CptSupermrkt

distutils.sysconfig, кажется, указывает на то, что он должен учитывать переменную среды CC: /
CptSupermrkt

Просто чтобы убедиться, что вы не используете sudo, не так ли?
Петр Доброгост

Ответы:


1

/opt/csw/bin/gcc-4.8 путь указывает для OpenCSW, который предустановлен с дистрибутивом Oracle (либо удален 4.8, либо имеется другая версия).

Попробуйте настройки CCи CXXпеременные окружения внутри setup.pyс os.environ:

os.environ["CC"] = "g++-4.7" os.environ["CXX"] = "g++-4.7"

(4.7 - это моя версия g++, установите то, что у вас есть /bin).


0

Может быть, создать мягкую ссылку в /opt/csw/bin/gcc-4.8этом месте на ваш ccили gccкомпилятор?


Это больше вопрос, чем ответ. Пожалуйста, просмотрите: как мне написать хороший ответ . И обновите свой ответ, возможно, с некоторыми примерами и более объяснениями. Спасибо.
devnull

Это вряд ли сработает, так как параметры gccкомандной строки разные. Скрипт, который отбрасывает специфичные для gcc параметры и затем вызывает доступный компилятор, может работать.
Anthon

@DevNull Как это вопрос? Кажется, что это будет работать нормально, хотя и немного хакерски
Майкл Мрозек

@MichaelMrozek, да, возможно. Но больше похоже, что WayneB просит OP попытаться создать мягкую ссылку maybe?, а не показывает, как создать такую ​​ссылку и как она может помочь. Я отрекаюсь от своего комментария, если я единственный, кто так чувствует.
devnull
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.