Python动态导入

时间:2016-06-17 13:09:31

标签: python python-2.7 python-import

我有一个像[(module_name, module_abs_path)(mod2, path2), ...]

这样的元组列表

模块位于我的脚本所在的“modules”子目录中。我正在尝试编写一个脚本,该脚本读取conf文件,并从模块目录中的模块中获取conf文件中的一些变量。我的目的是从该脚本加载并运行所有模块,以便他们可以访问这些变量。

到目前为止我尝试过但失败了:

  1. 尝试使用__import__(),但表示不允许按文件名运行
  2. 尝试importlib.import_module(),但同样的错误。
  3. 我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

您是否尝试在导入之前修复路径?

from __future__ import print_function
import importlib
import sys

def import_modules(modules):
    modules_dict = dict()
    for module_name, module_path in modules:
        sys.path.append(module_path)  # Fix the path
        modules_dict[module_name] = importlib.import_module(module_name)
        sys.path.pop()                # Undo the path.append
    return modules_dict

if __name__ == '__main__':
    modules_info = [
        ('module1', '/abs/path/to/module1'),
    ]

    modules_dict = import_modules(modules_info)
    # At this point, we can access the module as
    # modules_dict['module1']
    # or...

    globals().update(modules_dict)
    # ... simply as module1