[Python-de] PYTHONPATH und sys.path

Olе Streicher ole-usenet-spam at gmx.net
Fr Feb 3 09:29:45 CET 2012


Stefan Behnel <python-de at behnel.de> writes:
> Heißt das jetzt, du möchtest deinen Nutzern lieber aufbürden, irgendwelche
> Pfade von Hand herauszusuchen und explizit von der Kommandozeile zu
> übergeben, anstatt einfach in eine saubere Umgebung zu installieren?

Konkreter Fall: das Paket wird lokal von einem (non-Root) Nutzer
installiert, der dann den Pfad mittels PYTHONPATH adaptiert. Das läuft
gut, bis der Systemadministrator das Paket ebenfalls (site-local)
installiert. Irgendwann gibt es ein Update, welches der lokale Nutzer
installiert, um nach einer Weile festzustellen, dass der -- trotz
PYTHONPATH -- immer noch die alte Version (nämlich die des Sysadmins)
lädt. Jetzt entsteht an mich (als Paketautor) die Frage, wie er es
erreichen kann, dass das user-installiertes Paket verwendet wird und
nicht das ältere, vom Sysadmin installierte.

"Dann installiere Dir doch noch ein weiteres Paket, oder besser gleich
zwei [virtualenv, virtualenvwrapper] und arbeite Dich in die
Funktionsweise dieser Pakete ein" hilft da nicht gerade für Akzeptanz.

Irgendwie leuchtet mir nicht ein, warum Python (was ja letztlich für
seinen pragmatischen Ansatz bekannt ist) an dieser Stelle die normale
Logik "Userkonfiguration geht vor lokaler Konfiguration und die vor der
Defaultkonfiguration" missachtet.

> Da leuchtet mir der Vorteil nicht so direkt ein.

Der Grund ist, dass ich gar nicht selbst die Installation durchführe,
sondern Nutzer darin unterstützen möchte, das Paket möglichst problemlos
einzusetzen. Ein "wenn Du es selbst installierst, musst Du den
PYTHONPATH entsprechend setzen" ist da ziemlich trivial; es entspricht
einem "Wenn Du Deine eigenen Programme starten willst, setze PATH. Wenn
Du eigene shared libs verwenden willst, setze LD_LIBRARY_PATH. Wenn Du
eigene Java-Klassen verwenden willst, setze CLASSPATH". In keinem der
Fälle würde man erwarten, dass sich die lokale (site-) Konfiguration
vordrängelt. Nur Py-"behave as expected"-thon weicht da auf subtile
Weise ab.

Viele Grüße

Ole


Mehr Informationen über die Mailingliste python-de