gpt4 book ai didi

python - 如何动态导入模块?

转载 作者:太空宇宙 更新时间:2023-11-03 10:55:04 25 4
gpt4 key购买 nike

我正在尝试在 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

我错过了什么?

最佳答案

import 指令不适用于变量内容(作为字符串)(参见扩展说明 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 .它讨论了类似的情况。

关于python - 如何动态导入模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42401495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com