0
私はpython -m modulename command
で実行したいモジュールを持っていますが、それらのモジュールをインポートして起動したサブモジュールを参照しています。次のようにファイルのレイアウトは次のとおりです。__main__で動的サブモジュールのインポートに失敗しました
__main__.py
と
mainmodule/:
__init__.py (empty)
submodule1.py
submodule2.py
__main__.py
次のように:予想通り
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
はsubmodule1
を起動します。python -m mainmodule cmd1
作品;python -m mainmodule.submodule1
作品;python -m mainmodule.submodule2
も有効です。
しかしpython -m mainmodule cmd2
は失敗します。
ImportError: No module named mainmodule.submodule2
なぜ?私は多くの方法でimport
値式を変更しようとしましたが、常に同じ方法で失敗します。
辞書検索は、 'IndexError'ではなく' KeyError'で失敗します。また、 'Error'は組み込みの名前ではなく、おそらく' Exception'を意味しますが、あなたのコードでそれをキャッチする必要はありません –