如何从命令行导入然后迭代导入的模块?

时间:2012-03-02 18:47:57

标签: python import

我有一个像这样的文件夹结构:

package_name/
|-- module1
|-- module2
|-- module3

我需要做的是import package_name,然后迭代每个模块,一个接一个地运行代码。导入是在命令行中给出的,所以我无法提前控制。因此,用户可能会说run_script.py --modules='package_name.module1'或用户可能只是说run_script.py --modules='package_name

我可以执行from package_name import *,这将导入__all__中我__init__.py变量中定义的所有内容,但是从那里我有点难过。

对于我的下一步,我需要一种方法:

for module in imported:
    module.run()

1 个答案:

答案 0 :(得分:1)

我通常使用这样的函数来按路径导入模块:

def import_by_path(path):
  if '.' not in path:
    return __import__(path, globals(), locals())

  path, module = path.rsplit('.', 1)
  mod = __import__(path, globals(), locals(), [module])

  try:
    return getattr(mod, module)
  except AttributeError:
    raise ImportError, "Could not import %s" % path

像这样使用:

mod = import_by_name("itertools")

或者在你的情况下:

for mod in map(import_by_name, imported):
  mod.run()