__main__中动态子模块导入失败

时间:2016-10-11 16:00:12

标签: python python-2.7

我有一个模块,我想用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值表达式,它总是以同样的方式失败。

1 个答案:

答案 0 :(得分:0)

更改;

  cmd = modules[sys.argv[1]]

  cmd = commands[sys.argv[1]]

除了一个拼写错误修复,我无法得到同样的错误。你可能没有从mainmodule上面的目录运行python吗?或者你可能没有正确安装mainmodule