Python动态导入

13 浏览
0 Comments

Python动态导入

这个问题已经有答案了::

如何在给定完整路径的情况下动态导入模块?

我有一个类似[(module_name, module_abs_path)(mod2, path2), ...]的元组列表。

这些模块位于脚本所在的“modules”子目录中。我正在编写一个脚本,该脚本读取一个配置文件,并使来自“modules”目录的模块中的某些变量可用。我的意图是从此脚本加载和运行所有模块,以便它们可以访问这些变量。

我已经尝试过但失败的事项:

  1. 尝试使用__import __(),但它说不允许按文件名运行
  2. 尝试 importlib.import_module()但是会出现相同的错误。

我应该如何做这件事?

admin 更改状态以发布 2023年5月21日
0
0 Comments

在导入之前尝试修复路径了吗?

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

0