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

importlib.reload无法更新__init__.py导入的子模块值,如何解决?

问题分析

你遇到的核心问题是:importlib.reload()仅会重新加载指定模块,不会自动递归处理它依赖的子模块;同时当主模块通过from .sub import version_info_sub直接导入变量时,该变量会被绑定到主模块的命名空间,后续即使子模块更新,主模块里的旧绑定也不会自动同步。

解决方案

下面提供两种直接有效的解决方式:

方法一:先重载子模块,再重载主模块

修改主代码,先重新加载子模块,让子模块的变量更新,再重载主模块触发重新导入操作:

from importlib import reload
import version_info
from version_info import sub

# 第一步:重载子模块,更新sub.py里的变量
reload(sub)
# 第二步:重载主模块,重新执行导入语句绑定新变量
reload(version_info)

print(version_info.version_string)  # 正常更新
print(version_info.version_info_sub)  # 现在会拿到修改后的新值

方法二:修改导入方式,避免直接绑定变量

调整version_info/__init__.py的导入逻辑,改为保留对子模块的引用,而非直接导入变量:

from . import sub
version_string = "6"

主代码中通过主模块间接访问子模块的变量,重载子模块后即可获取最新值:

from importlib import reload
import version_info

# 重载子模块更新变量
reload(version_info.sub)
# 可选:如果主模块自身有修改,再重载主模块
reload(version_info)

print(version_info.version_string)
print(version_info.sub.version_info_sub)  # 直接访问子模块变量,自动同步更新

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 05:12:06