[Python-de] PYTHONPATH und sys.path

Christian Heimes lists at cheimes.de
Fr Feb 3 14:25:03 CET 2012


Am 03.02.2012 13:57, schrieb Bernhard Herzog:
> Wo ist das im übrigen implementiert? In site.py finde ich diverse 
> sys.path.append Aufrufe aber keinen Code, der etwas am Anfang von sys.path 
> einfügt. Vielleicht habe ich es übersehen. Ich habe in Python 2.6, 2.7 und 
> 3.2 nachgeschaut.

Ich hätte vielleicht der Vollständigkeit erwähnen sollen, dass das
Verhalten eine Spezialität von easy-install.pth und setuptools ist.
Sorry für die Verwirrung! Normale .pth Dateien verhalten sich anders.

easy-install.pth fügt die Eggs und weiteren Pfade immer vor den übrigen
Pfaden ein, dmait eine virtuelle Umgebung global installierte
Pythonpakete überschreiben kann. Erweiterungen wie virtualenv und pip
machen es übrigens genau so. Der Einfachheit halber wird dabei
PYTHONPATH nicht berücksichtigt.

.pth haben einen Sonderfall. Wenn eine Zeile mit dem String "import"
gefolgt von einem Whitespace oder Tab startet, dann wird diese Zeile
über exec() ausgeführt.

Eine easy-install.pth sieht wie folgt aus:

import sys; sys.__plen = len(sys.path)
./some.egg
./other.egg
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:];
p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert =
p+len(new)

Christian



Mehr Informationen über die Mailingliste python-de