Warum versucht dieses Python-Paket, eine nicht vorhandene gcc zu verwenden?


8

Ich versuche, PyCrypto für Python 3 unter Solaris zu installieren. Unabhängig davon, ob ich es über " python3 setup.py install" oder " pip3 install pycrypto" mache, stoße ich auf dasselbe Problem: Es wird ein gcc aufgerufen, der nicht existiert:

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

Jetzt weiß ich nichts über die Geschichte der Maschine, auf der ich mich befinde. Es ist möglich, dass /opt/csw/bin/gcc-4.8 irgendwann in der Vergangenheit existiert hat. Aber es geht nicht mehr. export CC=/usr/bin/gcc (oder ein anderes gcc) behebt das Problem NICHT --- ohne Fehler wird /opt/csw/bin/gcc-4.8 aufgerufen.

Ich bin weniger daran interessiert, PyCrypto zu installieren, als vielmehr daran zu verstehen, WARUM dieser falsche Aufruf von Anfang an gemacht wird. Wo wird der Wert "/opt/csw/bin/gcc-4.8" gespeichert? Wie / woher erhält das System überhaupt die Information, dass es diesen Compiler aufrufen muss?

Das einzige, woran ich denken kann, ist, dass Python3 ursprünglich mit /opt/csw/bin/gcc-4.8 kompiliert wurde und Python3 es dauerhaft an einer Stelle eingebrannt hat, für die /opt/csw/bin/gcc-4.8 der zu verwendende Compiler ist Sachen zusammenstellen. Wenn dies der Fall ist, ist es am besten, Python3 zu entfernen und neu zu installieren, um diese fehlerhafte Abhängigkeit zu beseitigen?


Ich würde vermuten, dass es etwas damit zu tun haben könnte distutils? Siehe auch: stackoverflow.com/questions/5967065/…
jmunsch

1
Ich schlage einen Zeiger auf die Quelle vor? Alternativ können Sie sich zunächst ansehen oder einfügen setup.py.
Faheem Mitha

Der Inhalt von setup.py hier: github.com/dlitz/pycrypto/blob/master/setup.py Kein direkter Verweis auf gcc. Aber "build" ist Teil von "distutils", also ist @jmunsch vielleicht in die richtige Richtung.
CptSupermrkt

distutils.sysconfig scheint anzugeben, dass es die CC-Umgebungsvariable respektieren sollte: /
CptSupermrkt

Nur um sicherzugehen, dass Sie nicht verwenden sudo, oder?
Piotr Dobrogost

Antworten:


1

/opt/csw/bin/gcc-4.8 Pfad gibt für OpenCSW an, das mit der Oracle-Distribution vorinstalliert ist (entweder 4.8 wird gelöscht oder es gibt eine andere Version).

Versuchen Sie, die Variablen CCund CXXumgebungsvariablen von innen festzulegen setup.pymit os.environ:

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

(4.7 ist meine Version von g++, stellen Sie es auf das ein, was Sie in Ihrem haben /bin).


0

Erstellen Sie an /opt/csw/bin/gcc-4.8dieser Stelle möglicherweise einen Softlink zu Ihrem ccoder dem gccCompiler?


Dies ist eher eine Frage als eine Antwort. Bitte überprüfen Sie: Wie schreibe ich eine gute Antwort . Und aktualisieren Sie Ihre Antwort mit vielleicht einigen Beispielen und mehr Erklärungen. Vielen Dank.
devnull

Es ist unwahrscheinlich, dass dies funktioniert, da die gccBefehlszeilenoptionen unterschiedlich sind. Ein Skript, das die gcc-spezifischen Optionen wegwirft und dann den verfügbaren Compiler aufruft, funktioniert möglicherweise.
Anthon

@ DevNull Wie ist das eine Frage? Es scheint, als würde es gut funktionieren, wenn auch etwas hackig
Michael Mrozek

@ MichaelMrozek, ja, es könnte sein. Es scheint jedoch eher so, als würde WayneB OP bitten, einen Softlink zu erstellen maybe?, als zu zeigen, wie ein solcher Link erstellt wird und wie er helfen könnte. Ich ziehe meinen Kommentar zurück, wenn ich der einzige bin, der sich so fühlt.
devnull
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.