Wie man Module aus einem anderen Verzeichnis in Python importiert
Lukas Schneider
DevOps Engineer · Leapcell

Key Takeaways
- Du kannst
sys.path
zur Laufzeit ändern, um andere Verzeichnisse einzubeziehen. - Das Setzen der Umgebungsvariablen
PYTHONPATH
hilft Python, externe Module zu finden. - Die Strukturierung deines Projekts mit Paketen ermöglicht die Verwendung relativer Importe.
In Python verbessert die Organisation von Code in Module und Pakete die Lesbarkeit und Wartbarkeit. Es entstehen jedoch oft Situationen, in denen du ein Modul aus einem anderen Verzeichnis importieren musst. Dieser Artikel untersucht verschiedene Methoden, um dies zu erreichen, und stellt sicher, dass deine Projekte gut strukturiert und effizient bleiben.
Das Verständnis von Pythons Modulsuchpfad
Standardmäßig sucht Python nach Modulen an den folgenden Speicherorten:
- Das Verzeichnis des Eingabe-Skripts (oder das aktuelle Verzeichnis).
- Verzeichnisse, die in der Umgebungsvariablen
PYTHONPATH
angegeben sind. - Standardbibliotheksverzeichnisse.
Wenn sich das Modul außerhalb dieser Speicherorte befindet, löst Python einen ModuleNotFoundError
aus. Um Module aus anderen Verzeichnissen zu importieren, kannst du die unten beschriebenen Methoden verwenden.
Methoden zum Importieren von Modulen aus einem anderen Verzeichnis
1. Modifizieren von sys.path
zur Laufzeit
Pythons sys.path
ist eine Liste, die den Suchpfad des Interpreters für Module bestimmt. Indem du das Zielverzeichnis an diese Liste anhängst, kannst du Module aus diesem Verzeichnis importieren.
Beispiel:
import sys import os # Bestimme den absoluten Pfad des Zielverzeichnisses target_directory = os.path.abspath('/path/to/your/directory') # Hänge das Verzeichnis an sys.path an sys.path.append(target_directory) # Importiere nun dein gewünschtes Modul import your_module
Überlegungen:
- Flexibilität: Diese Methode ermöglicht die dynamische Änderung des Modulsuchpfads während der Laufzeit.
- Portabilität: Das Festcodieren absoluter Pfade kann die Code-Portabilität verringern. Die Verwendung relativer Pfade in Verbindung mit
os.path
-Funktionen kann dieses Problem mindern. - Wartbarkeit: Häufige Änderungen an
sys.path
können den Code schwerer verständlich und wartbar machen.
2. Verwenden der Umgebungsvariablen PYTHONPATH
Das Setzen der Umgebungsvariablen PYTHONPATH
ermöglicht es dir, zusätzliche Verzeichnisse anzugeben, in denen Python nach Modulen suchen soll.
Schritte:
-
Bestimme den absoluten Pfad: Finde den absoluten Pfad des Verzeichnisses, das das Modul enthält, das du importieren möchtest.
-
Setze die
PYTHONPATH
-Variable:-
Unter Unix oder macOS:
export PYTHONPATH="/path/to/your/directory:$PYTHONPATH"
-
Unter Windows:
set PYTHONPATH=C:\path\to\your\directory;%PYTHONPATH%
-
-
Führe dein Python-Skript aus: Wenn
PYTHONPATH
gesetzt ist, nimmt Python das angegebene Verzeichnis in seinen Modulsuchpfad auf.
Überlegungen:
- Persistenz: Die Einstellung der Umgebungsvariablen ist temporär und gilt nur für die aktuelle Sitzung, es sei denn, sie wird zu Shell-Startdateien oder Systemumgebungsvariablen hinzugefügt.
- Geltungsbereich: Diese Methode betrifft alle Python-Skripte, die in der Umgebung ausgeführt werden, was zu unbeabsichtigten Folgen führen kann, wenn verschiedene Projekte unterschiedliche Modulversionen benötigen.
3. Verwenden von Package-Relativen Importen
Wenn dein Projekt als Package mit einer __init__.py
-Datei strukturiert ist, kannst du relative Importe verwenden, um auf Module in übergeordneten oder gleichgeordneten Verzeichnissen zuzugreifen.
Beispiel für eine Verzeichnisstruktur:
project/
├── package/
│ ├── __init__.py
│ ├── module_a.py
│ └── subpackage/
│ ├── __init__.py
│ └── module_b.py
└── main.py
Importieren von module_a
in module_b
:
# Innerhalb von module_b.py from .. import module_a
Überlegungen:
- Ausführungskontext: Relative Importe basieren auf dem Namensattribut des Moduls. Sie funktionieren, wenn Module Teil eines Pakets sind, und funktionieren möglicherweise nicht richtig, wenn das Skript direkt ausgeführt wird.
- Lesbarkeit: Während relative Importe Referenzen innerhalb eines Pakets vereinfachen können, können sie den Code auch weniger lesbar und für neue Entwickler schwerer verständlich machen.
4. Nutzen des importlib
-Moduls
Für dynamische Importe bietet das Python-Modul importlib
Funktionalität zum programmgesteuerten Importieren von Modulen.
Beispiel:
import importlib.util import sys import os # Pfad zum Modul module_name = 'your_module' module_path = '/path/to/your/directory/your_module.py' # Lade das Modul spec = importlib.util.spec_from_file_location(module_name, module_path) your_module = importlib.util.module_from_spec(spec) sys.modules[module_name] = your_module spec.loader.exec_module(your_module) # Jetzt kannst du dein_modul verwenden your_module.your_function()
Überlegungen:
- Flexibilität: Diese Methode ist leistungsstark für Szenarien, die dynamisches Importieren erfordern, wie z. B. Plugins oder Erweiterungen.
- Komplexität: Sie führt zusätzliche Komplexität ein und ist im Allgemeinen nicht für Standardmodulimporte erforderlich.
Bewährte Praktiken
- Beibehalten einer konsistenten Projektstruktur: Organisiere dein Projekt so, dass verwandte Module sich innerhalb desselben Pakets oder Verzeichnisses befinden, wodurch der Bedarf an komplexen Importstrategien minimiert wird.
- Verwenden von virtuellen Umgebungen: Virtuelle Umgebungen helfen bei der Verwaltung von Abhängigkeiten und können Modulimporte vereinfachen, indem sie Projektumgebungen isolieren.
- Dokumentiere deine Importe: Dokumentiere alle Änderungen an
sys.path
oder das Vertrauen auf Umgebungsvariablen klar, um die Wartbarkeit und Zusammenarbeit des Codes zu unterstützen.
Indem du diese Methoden verstehst und anwendest, kannst du Modulimporte aus verschiedenen Verzeichnissen effektiv verwalten, was zu besser organisierten und wartbaren Python-Projekten führt.
FAQs
Weil sich das Verzeichnis nicht im Python-Standardmodulsuchpfad befindet.
Es ist kurzfristig nützlich, kann aber die Wartbarkeit in größeren Projekten beeinträchtigen.
Bei der Arbeit innerhalb eines strukturierten Pakets mit einer __init__.py
-Datei.
Wir sind Leapcell, deine erste Wahl für das Hosten von Python-Projekten.
Leapcell ist die Serverlose Plattform der nächsten Generation für Webhosting, asynchrone Aufgaben und Redis:
Multi-Sprachen-Unterstützung
- Entwickle mit Node.js, Python, Go oder Rust.
Stelle unbegrenzt viele Projekte kostenlos bereit
- zahle nur für die Nutzung – keine Anfragen, keine Gebühren.
Unschlagbare Kosteneffizienz
- Pay-as-you-go ohne Leerlaufgebühren.
- Beispiel: 25 $ unterstützen 6,94 Millionen Anfragen bei einer durchschnittlichen Antwortzeit von 60 ms.
Optimierte Entwicklererfahrung
- Intuitive Benutzeroberfläche für mühelose Einrichtung.
- Vollautomatische CI/CD-Pipelines und GitOps-Integration.
- Echtzeitmetriken und Protokollierung für verwertbare Einblicke.
Mühelose Skalierbarkeit und hohe Leistung
- Auto-Scaling zur einfachen Bewältigung hoher Parallelität.
- Null Betriebsaufwand – konzentriere dich einfach auf das Bauen.
Erfahre mehr in der Dokumentation!
Folge uns auf X: @LeapcellHQ