python动态导入

Python dynamic import

本问题已经有最佳答案,请猛点这里访问。

我有一个像[(module_name, module_abs_path)(mod2, path2), ...]这样的元组列表

这些模块位于脚本所在的"模块"子目录中。我正在尝试编写一个脚本,该脚本读取一个conf文件,并使conf文件中的一些变量可用于modules dir中的模块。我的目的是加载并运行这个脚本中的所有模块,这样它们就可以访问这些变量。

到目前为止我尝试过但失败的事情:

  • 尝试使用__import__(),但它表示不允许按文件名运行
  • 尝试了importlib.import_module(),但给出了相同的错误。
  • 我该怎么做呢?


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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    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