Pourquoi ce paquet Python essaie-t-il d'utiliser un gcc inexistant?


8

J'essaie d'installer PyCrypto pour Python 3 sur Solaris. Que je le fasse via " python3 setup.py install" ou " pip3 install pycrypto", je rencontre le même problème: un appel est fait vers un gcc qui n'existe pas:

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

Maintenant, je ne sais rien de l'histoire de la machine sur laquelle je suis. Il est possible que /opt/csw/bin/gcc-4.8 ait existé à un moment donné dans le passé. Mais ce n'est plus le cas. export CC=/usr/bin/gcc (ou un autre gcc) ne résout PAS le problème --- sans échec /opt/csw/bin/gcc-4.8 est appelé.

Je suis moins intéressé à installer PyCrypto et plus intéressé à comprendre POURQUOI cet appel bidon est fait pour commencer. Où est enregistrée la valeur "/opt/csw/bin/gcc-4.8"? Comment / où le système obtient-il même les informations pour penser qu'il doit appeler ce compilateur?

La seule chose à laquelle je peux penser est que Python3 a été initialement compilé avec /opt/csw/bin/gcc-4.8, et Python3 l'a en permanence gravé quelque part dans lequel /opt/csw/bin/gcc-4.8 est le compilateur à utiliser pour compiler des trucs. Si tel est le cas, est-ce que je ferais mieux de supprimer et de réinstaller Python3 pour se débarrasser de cette dépendance erronée?


Je suppose que cela pourrait avoir quelque chose à voir avec distutils? Voir aussi: stackoverflow.com/questions/5967065/…
jmunsch

1
Je suggère un pointeur vers la source? Vous pouvez également regarder ou coller setup.pypour commencer.
Faheem Mitha

Contenu de setup.py ici: github.com/dlitz/pycrypto/blob/master/setup.py Aucune référence directe à gcc. Mais «construire» fait partie des «distutils», alors peut-être que @jmunsch est dans la bonne direction.
CptSupermrkt

distutils.sysconfig semble indiquer qu'il doit respecter la variable d'environnement CC: /
CptSupermrkt

Juste pour être sûr que vous ne l'utilisez pas sudo, n'est -ce pas?
Piotr Dobrogost

Réponses:


1

/opt/csw/bin/gcc-4.8 chemin indique pour OpenCSW qui est pré-installé avec la distribution Oracle (soit 4.8 est supprimé ou il existe une autre version).

Essayez de définir les variables d'environnement CCet CXXde l'intérieur setup.pyavec os.environ:

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

(4.7 est ma version de g++, réglez-la sur ce que vous avez dans votre /bin).


0

Créer un lien logiciel à /opt/csw/bin/gcc-4.8ce point vers votre ccou votre gcccompilateur, peut-être?


Il s'agit plus d'une question que d'une réponse. Veuillez examiner: Comment puis-je écrire une bonne réponse . Et mettez à jour votre réponse avec peut-être quelques exemples et plus d'explications. Merci.
devnull

Il est peu probable que cela fonctionne car les gccoptions de ligne de commande sont différentes. Un script qui jette les options spécifiques à gcc puis appelle le compilateur disponible peut fonctionner.
Anthon

@DevNull Comment est-ce une question? Il semble que cela fonctionnerait bien, quoique un peu hacky
Michael Mrozek

@MichaelMrozek, oui, c'est possible. Mais il semble plus que WayneB demande à OP d'essayer de créer un lien logiciel maybe?, plutôt que de montrer comment créer un tel lien et comment cela pourrait aider. Je retire mon commentaire si je suis le seul à ressentir cela.
devnull
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.