Ich arbeite in einer sehr komplizierten Umgebung, in der verschiedene Maschinen Zugriff auf verschiedene verteilte Dateisysteme haben.
A
hat Zugriff auf Dateisystem X
und wird verwendet, um Software auf Dateisystem Y
. B
hat Zugriff auf Dateisystem Y
, aber nicht X
. Ich arbeite an der Maschine B
, und ich benutze Python sehr oft. Manchmal brauche ich Pakete, die nicht vorinstalliert sind. Daher verwende ich pip install PKGXYZ --user
, um sie lokal zu installieren. Das funktioniert im Allgemeinen gut, aber es gibt einen Haken.
Die Python-Pakete distutils
und ihre monkey-patched-Ableitung setuptools
, die von pip
verwendet werden, verwenden die distutils.sysconfig
-Funktionalität, um Compiler-Versionen, Pfade und dergleichen zu erhalten. Dazu verwenden sie das interne Makefile
, das zur Installation von Python verwendet wurde. Obwohl dies im Allgemeinen eine gute Strategie ist, schlägt es mit meiner konkreten Einrichtung fehl, weil die Pfade in Pythons intern Makefile
auf Dateisystem X
zeigen, auf die ich auf meinem Rechner B
keinen Zugriff habe. Daher benutze ich die Option --no-clean
von pip
und hacke die setup.py
der Pakete, die ich installieren möchte, mit Snippets wie folgt:
, so dass ich die Umgebungsvariable CC
verwenden kann, um die Standardeinstellungen des Compiler-Pfades von Pythons Makefile
mit etwas zu überschreiben, das auf meinem Rechner funktioniert.
Aber das ist ein hässlicher Hack. Es muss sicherlich eine bessere Möglichkeit geben, dies zu tun und pip
einen anderen Compiler über eine Umgebungsvariable, eine Konfigurationsdatei oder eine Befehlszeilenoption verwenden zu lassen. Oder ist es?
Es klingt, als hätten Sie Compiler-Tools auf System B. Eine Option wäre also, Python auf Ihrem System mit lokalen Tools neu zu erstellen und stattdessen zu verwenden.
Wenn Sie dies nur für Ihren Benutzer auf Ihrem System tun, können Sie es sogar im Home-Verzeichnis Ihres Benutzers installieren, um es komplett aus dem Weg zu räumen, und dann Ihre Umgebung für die Verwendung einrichten. Oder benutze virtualenv.
Sie können eine neue Python-Installation einfach erstellen und erstellen. Zum Beispiel für Python 3.5.1 unter Linux:
%Vor%Tags und Links python pip installation distutils setuptools