[Python-de] Python 2.7: sys.path vs. PYTHONPATH

Ole Streicher ole-usenet-spam at gmx.net
So Sep 18 14:44:01 CEST 2011


Hartmut Goebel <h.goebel at goebel-consult.de> writes:
> Dann hast Du bei 2.6 anders installiert. Kann es sein, dass Du unter 2.6
> setuptools/ditstribute nicht installiert hattest, als Du das andere
> installiert hast?

Keine Ahnung. Ich administriere den Rechner nicht selbst. Er wurde nur
irgendwann upgedatet (auf openSUSE 11.4), allerdings aller
Wahrscheinlichkeit ohne irgendwelche lokalen besonderheiten.

> Wenn Du sagst, bei 2.6 ging es, bei 2.7 nicht, dann prüfe bitte, ob alle
> Deinen Parameter wirklich unverändert sind. Oder noch besser: Mache einen
> erneuten Test mit 2.6.

Das wäre mit einem Downgrade verbunden und ist daher leider nicht mehr
möglich.

>> OK, das erklärt einiges. Das heißt (ich kann es gerade nicht testen), es
>> sollte reichen, so etwas zu schreiben?

> Nein, genügt nicht. Siehe `pydoc site`.

import site
site.addsitedir('/mylocal/python/lib64/python2.7/site-packages/')

so etwas?

>> beginnt und unmittelbar aufgerufen wird. Ich habe daher keinen Zugriff
>> auf das Environment des Nutzers.

> Häh? Entweder, Du bis für die Installation zuständig, dann hast Du Zugriff auf
> das Environment des Anwenders. 

Bin ich nicht, und ich habe auch keinen Zugriff.

> Oder Du hast keinen Zugriff auf das Environment des Anwenders, dann
> bist Du auch nicht dafür Verantwortlich, dem Anwender eine
> funktionsfähige Umgebung zu schaffen.

Die Umgebung ist ja funktionsfähig. Ich möchte jetzt lediglich das
Script so anpassen, dass es in dieser läuft.

Wenn ich dazu private Pakete installiere, dann sollte mein Script diese
natürlich auch finden, ohne dass der Anwender da noch irgendwas macht.

>> Ich dachte auch immer, dass genau dafür der sys.path vorgesehen ist
>> und PYTHONPATH nur dazu dient, den nochmal von außen zu setzen?
>
> Genau umgekehrt: PYTHONPATH ist der primäre Weg, den Modul-Suchpfad zu
> setzen. Denn der ist immer abhängig von der Betriebssystem-Umgebung (wo ist
> das Zeug installiert). Damit ist es Aufgabe des Betriebssystems, das der
> Anwendung mitzuteilen.

Wenn ein Programm eigene Pfade verwendet, dann ist es sinnvoll, diese
im Programm selbst zu vermerken -- insbesondere wenn es ein Programm
ist, welches für ein spezifisches Problem geschrieben ist (und nach
einem Jahr weggeworfen wird). "Das Betriebssystem" weiß doch schlielich
gar nicht, wo ich die zusätzlichen Pakete installiere -- aber ich weiß
es, und ich sollte meinem Programm dann auch sagen können, wo das ist.

>>> Oder verwende virtualenv.
>> Ist zumindest nicht unter docs.python.org zu finden.
> http://lmgtfy.com/?q=python+virtualenv

Das ist mir schon klar. Was ich damit sagen wollte: ich möchte nicht ein
spezielles Zusatzpaket installieren, wenn ich die Aufgabe auch schon mit
den "Batteries included" lösen kann.

Ole


Mehr Informationen über die Mailingliste python-de