python – 如何动态导入模块?

我试图在
Python中动态导入模块.现在,我有一个名为’modules’的目录,里面有两个文件;它们是mod1.py和mod2.py.它们是返回时间的简单测试函数(即mod1.what_time(‘now’)返回当前时间).

从我的主应用程序,我可以导入如下:

sys.path.append('/Users/dxg/import_test/modules')
import mod1

然后执行:

mod1.what_time('now') 

它的工作原理.

我并不总是知道目录中有哪些模块可用.我想导入如下:

tree = []
tree = os.listdir('modules')

sys.path.append('/Users/dxg/import_test/modules')

for i in tree:
  import i

但是我得到错误:

ImportError: No module named i

我希望我遗漏一些简单的东西.感谢任何建议.

最佳答案 导入指令不适用于变量内容(作为字符串)(请参阅扩展说明
here),但使用文件名.如果要动态导入,可以使用
importlib.import_module方法:

import importlib
tree = os.listdir('modules')

...

for i in tree:
    importlib.import_module(i)

注意:

>您无法从Lib下未包含模块的目录或类似的当前目录导入(将路径添加到路径将无济于事,请参阅上一个链接了解原因).最简单的解决方案是使这个目录(模块)成为一个包(只需在其中删除一个空的__init__.py文件),并调用importlib.import_module(‘..’i,’modules.subpkg’)或使用__import__方法.
>您也可以查看this question.它讨论了类似的情况.

点赞