Python 在导入模块时会将模块缓存到 sys.modules 中,所以即使你删除了文件,只要模块名相同,后续导入都会使用内存中已有的模块,而不会重新从文件加载。要实现每次都从文件加载,可以考虑以下两种方法:

1. 删除缓存中的模块

在每次重新导入前,先从 sys.modules 中删除对应模块,这样 Python 就会再次从文件系统中加载模块。例如:

1
2
3
4
5
6
7
8
import sys
import importlib

module_name = 'your_module'
if module_name in sys.modules:
del sys.modules[module_name]

your_module = importlib.import_module(module_name)

2. 使用 importlib.reload

如果模块已经导入,可以使用 importlib.reload 来强制重新加载模块的内容:

1
2
3
4
import importlib
import your_module # 假设模块已经导入

your_module = importlib.reload(your_module)

注意: 如果文件已经被删除,那么尝试重新加载会抛出 ImportError。确保在重新加载前文件存在或做相应的异常处理。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
import importlib

module_name = f"workbench.{tenant_id}_{platform}_parse_test"
class_name = "MyClass"

# 动态导入模块
module = importlib.import_module(module_name)

# 强制重新加载模块(确保读取最新的文件内容)
module = importlib.reload(module)

# 获取类
MyClass = getattr(module, class_name)

这样就能保证每次执行时,模块都会重新从文件系统加载更新后的内容,而不是使用内存中已缓存的版本。