Die Suche nach dem Modul (python -m)
Die Suche nach dem Modul bei Verwendung von python -m <modulname> folgt einem präzisen, schrittweisen Algorithmus, der garantiert, dass das aktuelle Arbeitsverzeichnis Vorrang hat.
Die Suche funktioniert in dieser exakten Reihenfolge:
1. Initialisierung von sys.path
Bevor die eigentliche Suche beginnt, erstellt der Python-Interpreter die Liste der zu durchsuchenden Pfade (sys.path).
- Der erste Eintrag in dieser Liste (
sys.path[0]) ist immer das aktuelle Arbeitsverzeichnis (Current Working Directory, CWD), also das Verzeichnis, von dem aus Sie denpython-Befehl abgesetzt haben.
2. Iterative Suche in sys.path
Python durchläuft nun jeden einzelnen Eintrag in sys.path in der Reihenfolge, in der er in der Liste erscheint. Für jeden Eintrag (der typischerweise ein Ordnerpfad ist) versucht Python, den angeforderten Modulnamen (<modulname>) zu finden.
Der Interpreter sucht nach einer der folgenden Übereinstimmungen:
- Für ein einzelnes Modul (z. B.
python -m test): Es wird im aktuellen Pfad nach einer Datei namenstest.pygesucht. - Für ein Paket (z. B.
python -m mein_paket.untermodul): Es wird im aktuellen Pfad nach einem Unterverzeichnis namensmein_paketgesucht, das eine__init__.py-Datei enthält (oder ab Python 3.3+ als implizites Namespace-Paket erkannt wird).
3. Exakte Reihenfolge der durchsuchten Orte
Die Suche stoppt, sobald eine Übereinstimmung gefunden wird. Die Prioritätenliste ist wie folgt:
| Priorität | Ort | Beschreibung |
|---|---|---|
| 1 | Aktuelles Arbeitsverzeichnis (Workspace) | Das Verzeichnis, in dem Sie den Befehl python -m ... eingeben. Hat höchste Priorität. |
| 2 | PYTHONPATH-Verzeichnisse | Alle Ordner, die in Ihrer Umgebungsvariable PYTHONPATH definiert sind, in der Reihenfolge, in der sie dort gelistet sind. |
| 3 | Standard-Systempfade | Systemweite Installationspfade, wie z.B. /usr/lib/pythonX.Y/ oder C:\PythonXY\Lib. |
| 4 | site-packages | Der spezifische Ordner, in dem Ihre via pip installierten Pakete abgelegt sind. |