2016-10-11 2 views
0

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ührungen submodule1 wie erwartet;
  • python -m mainmodule cmd1 funktioniert;
  • python -m mainmodule.submodule1 funktioniert;
  • python -m mainmodule.submodule2funktioniert 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.

+0

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 –

Antwort

0

Veränderung;

cmd = modules[sys.argv[1]] 

zu

cmd = commands[sys.argv[1]] 

Andere als ein Tippfehler zu beheben, kann ich nicht den gleichen Fehler. Führen Sie Python möglicherweise nicht aus dem Verzeichnis über mainmodule? Oder haben Sie vielleicht mainmodule nicht richtig installiert?