You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用importlib遍历.py配置文件?迭代时模块未更新问题

解决Python遍历导入模块时未更新的问题

我尝试用modl作为前缀,遍历用作配置文件的.py文件(选.py是因为方便声明和导入函数、变量),但第二次迭代时模块没更新。

代码示例

for settingsfile in ['settings1.py', 'settings2.py']:
    modl = importlib.import_module(settingsfile)
    var1 = modl.var1
    print('the variable:', var1)

输出结果

the variable:var1_from_settings1
the variable:var1_from_settings1

问题原因

Python的模块导入机制会把已导入的模块缓存到sys.modules字典里,第二次调用importlib.import_module()时,不会重新读取目标文件,直接返回缓存中的模块对象,所以两次拿到的都是第一次导入的settings1.py内容。

解决方法

方法1:导入前删除缓存中的模块

每次循环时先检查sys.modules里是否有目标模块,有就删掉,再重新导入,这样就能保证每次都是读取最新的文件内容:

import importlib
import sys

for settingsfile in ['settings1', 'settings2']:  # 注意去掉.py后缀,import_module不需要这个
    if settingsfile in sys.modules:
        del sys.modules[settingsfile]
    modl = importlib.import_module(settingsfile)
    var1 = modl.var1
    print('the variable:', var1)

方法2:使用importlib.reload()重新加载

如果先导入了模块,后续可以用reload()强制重新读取文件,但要注意必须先导入模块才能调用reload():

import importlib

for settingsfile in ['settings1', 'settings2']:
    modl = importlib.import_module(settingsfile)
    modl = importlib.reload(modl)  # 强制重新加载模块
    var1 = modl.var1
    print('the variable:', var1)

注意:importlib.import_module()的参数不需要带.py后缀,直接传入模块名即可(文件需在Python可识别的路径下,比如当前工作目录)。

内容的提问来源于stack exchange,提问作者tincan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 21:42:39