我有一个模块,我想用python -m modulename command
运行,命令引用通过导入子模块启动的子模块。文件布局如下:
mainmodule/:
__init__.py (empty)
submodule1.py
submodule2.py
__main__.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
值表达式,它总是以同样的方式失败。
答案 0 :(得分:0)
更改;
cmd = modules[sys.argv[1]]
到
cmd = commands[sys.argv[1]]
除了一个拼写错误修复,我无法得到同样的错误。你可能没有从mainmodule
上面的目录运行python吗?或者你可能没有正确安装mainmodule
?