Ich habe ein Modul, das ich mit python -m modulename command
mit Befehlen ausführen möchte, die sich auf Submodule beziehen, die durch Importieren von ihnen gestartet werden. Das File-Layout ist wie folgt:Dynamischer Submodulimport fehlgeschlagen in __main__
mainmodule/:
__init__.py (empty)
submodule1.py
submodule2.py
__main__.py
mit __main__.py
wie folgt:
import sys, importlib
commands = {"cmd1": "submodule1", "cmd2": "submodule2"}
try:
cmd = modules[sys.argv[1]]
except IndexError:
cmd = "cmd1"
except Error:
pass
module = importlib.import_module("."+cmd, "mainmodule")
python -m mainmodule
Einführungensubmodule1
wie erwartet;python -m mainmodule cmd1
funktioniert;python -m mainmodule.submodule1
funktioniert;python -m mainmodule.submodule2
funktioniert auch;
ABERpython -m mainmodule cmd2
versagt:
ImportError: No module named mainmodule.submodule2
Warum? Ich habe versucht, den import
Wertausdruck in vielerlei Hinsicht zu ändern, es schlägt immer auf die gleiche Weise fehl.
Wörterbuchsuche schlägt mit 'KeyError', nicht mit' IndexError' fehl. Außerdem ist "Fehler" kein eingebauter Name, Sie haben wahrscheinlich "Ausnahme" gemeint, aber Sie müssen es nicht in Ihrem Code abfangen –