Wenn Sie Python 3.5 oder höher verwenden, können Sie importlib.util
zum direkten Import einer .py
Datei an einem beliebigen Ort als Modul zu speichern, ohne dass eine Änderung der sys.path
.
import importlib.util
import sys
def load_module(file_name, module_name)
spec = importlib.util.spec_from_file_location(module_name, file_name)
module = importlib.util.module_from_spec(spec)
sys.modules[module_name] = module
spec.loader.exec_module(module)
return module
El file_name
muss eine Zeichenkette oder ein pfadähnliches Objekt sein. Der module_name
ist erforderlich, weil alle geladenen Python-Module einen (gepunkteten) Modulnamen haben müssen (wie sys
, importlib
, oder importlib.util
), aber Sie können jeden verfügbaren Namen für dieses neue Modul wählen.
Sie können diese Funktion wie folgt verwenden:
my_module = load_module("file.py", "mymod")
Nachdem es einmal in den Python-Prozess importiert wurde, indem die load_module()
ist das Modul unter dem angegebenen Modulnamen importierbar.
# file.py =
print(f"{__name__} imported (file.py)")
# =========
# one.py ==
print(f"{__name__} imported (one.py)")
load_module("file.py", "mymod")
import two
# =========
# two.py ==
print(f"{__name__} imported (two.py)")
import mymod
# =========
Mit den oben genannten Dateien können Sie den folgenden Befehl ausführen, um zu sehen, wie file.py
importierbar geworden.
$ python3 -m one
__main__ imported (one.py)
two imported (two.py)
mymod imported (file.py)
Diese Antwort basiert auf der offiziellen Python-Dokumentation: importlib
: Direktes Importieren einer Quelldatei.