¿Por qué este paquete de Python está tratando de usar un gcc inexistente?


8

Estoy tratando de instalar PyCrypto para Python 3 en Solaris. Ya sea que lo haga a través de " python3 setup.py install" o " pip3 install pycrypto", me encuentro con el mismo problema: se realiza una llamada a un gcc que no 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

Ahora, no sé nada sobre la historia de la máquina en la que estoy. Es posible que /opt/csw/bin/gcc-4.8 haya existido en algún momento en el pasado. Pero ya no. export CC=/usr/bin/gcc (o algún otro gcc) NO soluciona el problema --- sin falta se llama /opt/csw/bin/gcc-4.8.

Estoy menos interesado en instalar PyCrypto y más interesado en entender POR QUÉ se hace esta llamada falsa para empezar. ¿Dónde se guarda el valor "/opt/csw/bin/gcc-4.8"? ¿Cómo / dónde obtiene el sistema la información para pensar que necesita llamar a ese compilador?

Lo único en lo que puedo pensar es que Python3 se compiló originalmente con /opt/csw/bin/gcc-4.8, y Python3 lo tiene quemado permanentemente en un lugar donde /opt/csw/bin/gcc-4.8 es el compilador para usar compilando cosas Si este es el caso, ¿sería mejor eliminar y reinstalar Python3 para deshacerme de esta dependencia errónea?


¿Supongo que podría tener algo que ver distutils? Ver también: stackoverflow.com/questions/5967065/…
jmunsch

1
Sugiero un puntero a la fuente? Alternativamente, mire o pegue setup.pypara comenzar.
Faheem Mitha

contenido de setup.py aquí: github.com/dlitz/pycrypto/blob/master/setup.py No hay referencia directa a gcc. Pero "build" es parte de "distutils", por lo que tal vez @jmunsch esté en la dirección correcta.
CptSupermrkt

distutils.sysconfig parece indicar que debe respetar la variable ambiental CC: /
CptSupermrkt

Solo para estar seguro de que no lo usas sudo, ¿verdad?
Piotr Dobrogost

Respuestas:


1

/opt/csw/bin/gcc-4.8 la ruta indica para OpenCSW que viene preinstalado con la distribución de Oracle (se elimina 4.8 o hay otra versión).

Intenta definir los CCy CXXvariables de entorno desde el interior setup.pycon os.environ:

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

(4.7 es mi versión de g++, configúrelo a lo que tiene en su /bin).


0

Cree un enlace suave en /opt/csw/bin/gcc-4.8esos puntos a su cco gcccompilador, ¿tal vez?


Esto es más una pregunta que una respuesta. Por favor revise: ¿Cómo escribo una buena respuesta ? Y actualice su respuesta con quizás algunos ejemplos y más explicaciones. Gracias.
devnull

Es poco probable que funcione, ya que las gccopciones de la línea de comandos son diferentes. Sin embargo, un script que descarta las opciones específicas de gcc y luego llama al compilador disponible podría funcionar.
Anthon

@DevNull ¿Cómo es esta una pregunta? Parece que funcionaría bien, aunque un poco hacky
Michael Mrozek

@MichaelMrozek, sí, podría ser. Pero parece que WayneB le está pidiendo a OP que intente crear un enlace suave maybe?, en lugar de mostrar cómo crear dicho enlace y cómo podría ayudar. Retracto mi comentario si soy el único que se siente así.
devnull
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.