我想卸载属于特定模块的所有子模块,因为它与另一个模块冲突。这就是我所做的:
mainmodule_submodules = [key for key in sys.modules if key.startswith('mainmodule')]
for mainmodule_submodule in mainmodule_submodules:
del mainmodule_submodule # deletes the variable mainmodule_submodule instead of the submodule that's stored in it
del sys.modules[mainmodule_submodule]
问题是,这会删除 for 循环创建的变量,mainmodule_submodule
而不是存储 值的模块mainmodule_submodule
。我该怎么做呢?
我不确定您的确切用例是什么。处理卸载模块(并且可能稍后再次重新加载它们)听起来很容易出错。我宁愿建议重构代码以减少技术债务,而不是实施解决方法。
但是,如果您想卸载模块,只需使用
del sys.modules[module]
(并且del globals()[module]
如果您不想再使用导入的模块)。注意:我缩短了您的变量名称,以便在此示例上下文中获得更好的可读性。
在不知道冲突在哪里的情况下,如果在您自己的代码中,也许您可以通过使用别名来避免冲突。