HOWTO · Python

Importieren einer Variable aus einer anderen Datei in Python

In diesem Tutorial wird gezeigt, wie Sie eine Variable aus einer anderen Datei in Python importieren.

Auf dieser Seite

Um eine Variable aus einer anderen Python-Datei zu verwenden, importieren Sie deren Modul und lesen anschließend die Variable aus oder binden den Namen direkt mit from module import name. Das Modul muss über Pythons Importpfad auffindbar sein. Bei einem kleinen Projekt können beide Dateien im selben Verzeichnis liegen; führen Sie das importierende Skript aus diesem Projekt heraus aus.

Einen bestimmten Namen mit from ... import ... importieren

Angenommen, config.py definiert greeting = "Hello, World!". Die importierende Datei kann from config import greeting verwenden und anschließend direkt auf greeting zugreifen. Der Modulname entspricht dem Dateinamen ohne .py. Diese Form ist praktisch, wenn Sie nur wenige Namen benötigen. Mehrere bekannte Namen können Sie durch Kommas getrennt importieren, zum Beispiel mit from config import greeting, language.

Führen Sie dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

from pathlib import Path
from tempfile import TemporaryDirectory
import sys

with TemporaryDirectory() as directory:
    project = Path(directory)
    (project / "config.py").write_text('greeting = "Hello, World!"\n', encoding="utf-8")
    sys.path.insert(0, str(project))
    from config import greeting
    print(greeting)

Dieses Beispiel ist zur Ausführung durch die Laufzeitkoordination vorgesehen; im Schreibpaket wurde kein Ausführungsergebnis bereitgestellt.

Das Modul importieren und auf seine Variable zugreifen

Verwenden Sie import config und lesen Sie anschließend config.greeting, wenn das Quellmodul bei jedem Zugriff sichtbar bleiben soll. Das Modulpräfix macht deutlich, woher der Name stammt, und verringert Namenskonflikte, wenn verschiedene Module gleichnamige Namen definieren. Bei einem gewöhnlichen Import wird der importierte Name außerdem zum Zeitpunkt des Imports gebunden. Wird ein Wert später im Quellmodul geändert, entsteht dadurch keine dynamische Verbindung zu einem separat importierten Namen.

Ein Modul dynamisch mit importlib importieren

Verwenden Sie importlib, wenn der Modulname erst zur Laufzeit festgelegt wird, etwa durch eine Einstellung oder eine Benutzerauswahl. Für ein bekanntes Modul ist ein normaler Import kürzer und leichter nachzuvollziehen. Eine eigenständige dynamische Variante sieht so aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

from pathlib import Path
from tempfile import TemporaryDirectory
import importlib
import sys

with TemporaryDirectory() as directory:
    project = Path(directory)
    (project / "config.py").write_text('greeting = "Hello, World!"\n', encoding="utf-8")
    sys.path.insert(0, str(project))
    module_name = "config"
    module = importlib.import_module(module_name)
    print(module.greeting)

importlib.import_module() gibt das Modulobjekt zurück. Greifen Sie daher über dieses Objekt auf die Variable zu. Das Modul muss weiterhin über das Importsystem auffindbar sein.

Ein Modul aus einem anderen Verzeichnis importierbar machen

Python durchsucht Verzeichnisse auf dem Importpfad, nicht beliebige Dateien. Eine einfache Struktur ist project/main.py neben project/settings/config.py; vom Startkontext und der Paketeinrichtung hängt ab, ob settings.config importiert werden kann. Ergänzen Sie für ein reguläres Paket gegebenenfalls eine __init__.py und verwenden Sie den Paketnamen, zum Beispiel from settings.config import greeting. Wenn Sie das Programm aus einem anderen Verzeichnis starten, können sich die von Python durchsuchten Orte ändern. Verwenden Sie daher möglichst eine einheitliche Startmethode für das Projekt.

Als bewusst gewählte Ausweichlösung für ein eigenständiges Skript können Sie vor dem Import das Verzeichnis mit dem Modul zu sys.path hinzufügen. Ermitteln Sie dieses Verzeichnis nach Möglichkeit anhand eines stabilen Speicherorts, statt das aktuelle Arbeitsverzeichnis vorauszusetzen:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

from pathlib import Path
from tempfile import TemporaryDirectory
import sys

with TemporaryDirectory() as directory:
    project = Path(directory)
    settings_directory = project / "settings"
    settings_directory.mkdir()
    (settings_directory / "config.py").write_text('greeting = "Hello, World!"\n', encoding="utf-8")
    sys.path.insert(0, str(settings_directory))
    from config import greeting
    print(greeting)

Damit wird ein Verzeichnis zu sys.path hinzugefügt, nicht die Moduldatei selbst. Bei langfristig gepflegten Anwendungen sind Paketimporte oder ein installiertes Paket meist einfacher zu verwalten, als den Importpfad im Anwendungscode zu ändern.

Die Beispiele ausführen und Fehler beheben

Speichern Sie das Modul unter genau dem Namen, der im Import verwendet wird, und achten Sie dabei auch auf die Groß- und Kleinschreibung. Stellen Sie außerdem sicher, dass die Variable auf Modulebene definiert ist. Meldet Python ModuleNotFoundError, überprüfen Sie den Dateinamen, die Verzeichnisstruktur, den Start des Skripts und ob das Verzeichnis mit dem Modul auf dem Importpfad liegt. Meldet Python für einen Namen ImportError, prüfen Sie, ob dessen Schreibweise mit einem im Modul definierten Namen übereinstimmt. Vermeiden Sie eigene Dateinamen, die denen von Standardbibliotheksmodulen entsprechen; sonst kann Python das falsche Modul laden.

Ein direkter Import eignet sich am besten für eine feste Abhängigkeit. Verwenden Sie from config import greeting, wenn Sie bequem auf wenige Namen zugreifen möchten, oder import config, wenn der sichtbare Modulnamensraum die Lesbarkeit verbessert. Nutzen Sie importlib, wenn der Modulname tatsächlich von Daten abhängt, die erst zur Laufzeit vorliegen.