[Python-de] wie sucht Python die Module?
Stefan Schwarzer
sschwarzer at sschwarzer.net
Son Apr 11 15:03:52 CEST 2004
Hallo Werner,
Frohe Ostern! :)
On Sun, 2004-04-11 12:17:00 +0200, Werner Warweg wrote:
> Trotz 5 Büchern, die ich mir gekauft habe, finde ich keine Antwort auf
> die Frage, wie und in welcher Reihenfolge Python seine Module, Dateien
> etc. zusammensucht.
"Module" ist mir relativ klar, aber was meinst du zum Beispiel mit
"Dateien etc."?
> Magic-Lines fand ich nur unter Linux im Buch Python 2.x, Das
Was heißt "Magic-Lines"? Meinst du "#! /pfad/zum/interpreter" in der
ersten Zeile?
> Einsteigerseminar von Martin Uzak. Da steht aber auch ausdrücklich, "das
> funktioniert nur unter Unix".
>
> Wie kann man zwei Versionen des Interpreters auf dem System haben, da ja
> sicherlich nicht alle Komponenten immer auch sofort für ein neues
> Release zur Verfügung steht.
Die reinen Python-Module laufen normalerweise auch auf jeder neueren
Version. Viele kompilierte Erweiterungen werden auch schon während der
Beta-Phase einer neuen Python-Version getestet und in kompilierter
Form angeboten.
Davon abgesehen, kannst du mehrere Python-Versionen auf dem Rechner
haben, sofern du sie in unterschiedlichen Verzeichnissen bzw.
Verzeichnis-Bäumen installierst. Jedenfalls ist das kein Problem, wenn
man Python selbst kompiliert und dabei auch den zukünftigen Pfad angibt.
In einem laufenden Python-Prozess werden zum Finden der Module die
Verzeichnisse in sys.path abgesucht. Standardmäßig sind darin die
Pfade enthalten, die die Standard-Bibliothek enthalten, die zum
laufenden Binary gehört. Zum Beispiel:
Python 2.3.3 (#2, Mar 27 2004, 23:18:46)
[GCC 3.3.3 [FreeBSD] 20031106] on freebsd5
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/local/lib/python23.zip', '/usr/local/lib/python2.3', '/usr/local/lib/python2.3/plat-freebsd5', '/usr/local/lib/python2.3/lib-tk', '/usr/local/lib/python2.3/lib-dynload', '/usr/local/lib/python2.3/site-packages', '/usr/local/lib/python2.3/site-packages/Numeric', '/usr/local/lib/python2.3/site-packages/PIL', '/usr/local/lib/python2.3/site-packages/piddle']
>>>
Der String '' am Anfang bezeichnet das aktuelle Verzeichnis.
Frage an die anderen: Wie finden die Verzeichnisse zu den
nachträglichen Erweiterungen (PIL etc.) ihren Weg in sys.path? Werden
einfach alle Verzeichnisse in site-packages mit aufgenommen?
Du kannst sys.path in-place verändern, um die Suchreihenfolge für
_danach_ importierte Module zu verändern.
Falls du ein Python-Binary hast, aber andere Pfade durchsuchen willst,
kannst du zusätzliche Suchpfade über die Umgebungsvariable PYTHONPATH
angeben. Schau mal in die Online-Doku auf http://www.python.org .
> Um nicht alle Projekte wieder überarbeiten zu müssen, bietet es sich an,
> auch frühere Stände zu speichern.
Was meinst du mit "frühere Stände"?
Viele Grüße
Stefan