我试图在
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.它讨论了类似的情况.