Por que este pacote Python está tentando usar um gcc inexistente?


8

Estou tentando instalar o PyCrypto para Python 3 no Solaris. Seja através de " python3 setup.py install" ou " pip3 install pycrypto", o mesmo problema ocorre: é feita uma chamada para um gcc que não existe:

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

Agora, não sei nada sobre a história da máquina em que estou. É possível que /opt/csw/bin/gcc-4.8 existisse em algum momento no passado. Mas isso não acontece mais. export CC=/usr/bin/gcc (ou algum outro gcc) NÃO corrige o problema --- sem falha é chamado /opt/csw/bin/gcc-4.8.

Estou menos interessado em instalar o PyCrypto e mais interessado em entender POR QUE essa chamada falsa é feita para começar. Onde o valor "/opt/csw/bin/gcc-4.8" foi salvo? Como / onde o sistema obtém as informações para pensar que precisa chamar esse compilador?

A única coisa que consigo pensar é que o Python3 foi originalmente compilado com /opt/csw/bin/gcc-4.8, e o Python3 o gravou permanentemente em algum lugar em que /opt/csw/bin/gcc-4.8 é o compilador a ser usado para compilando coisas. Se for esse o caso, seria melhor remover e reinstalar o Python3 para me livrar dessa dependência errônea?


Eu acho que isso pode ter algo a ver com distutils? Veja também: stackoverflow.com/questions/5967065/…
jmunsch

1
Sugiro um ponteiro para a fonte? Como alternativa, observe ou cole setup.pypara começar.
Faheem Mitha

conteúdo do setup.py aqui: github.com/dlitz/pycrypto/blob/master/setup.py Nenhuma referência direta ao gcc. Mas "build" faz parte de "distutils", então talvez @jmunsch esteja na direção certa.
CptSupermrkt

distutils.sysconfig parece indicar que deve respeitar a variável ambiental do CC: /
CptSupermrkt

Só para ter certeza de que você não usa sudo, não é?
Piotr Dobrogost

Respostas:


1

/opt/csw/bin/gcc-4.8 caminho indica para o OpenCSW que vem pré-instalado com a distribuição Oracle (o 4.8 é excluído ou existe outra versão).

Tente definir as variáveis ​​de ambiente CCe CXXde dentro setup.pycom os.environ:

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

(4.7 é a minha versão do g++, defina-o como você tem no seu /bin).


0

Criar um soft link em /opt/csw/bin/gcc-4.8que aponta para o seu ccou gcccompilador, talvez?


Isso é mais uma pergunta do que uma resposta. Revise: Como escrevo uma boa resposta . E atualize sua resposta com talvez alguns exemplos e mais explicações. Obrigado.
devnull

É improvável que funcione, pois as gccopções da linha de comando são diferentes. Um script que joga fora as opções específicas do gcc e depois chama o compilador disponível pode funcionar.
Anthon

@DevNull Como isso é uma pergunta? Parece que ele iria funcionar bem, embora um pouco hacky
Michael Mrozek

@MichaelMrozek, sim, pode. Mas parece mais que WayneB está pedindo ao OP para tentar criar um link flexível maybe?, do que mostrando como criar um link e como isso pode ajudar. Retiro meu comentário se sou o único que se sente assim.
devnull
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.