I want to unload all submodules that belong to a specifc module, because it conflicts with another module. Here's what I do:
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]
The problem is that this deletes the variable mainmodule_submodule that's created by the for loop instead of the module that's stored a the value of mainmodule_submodule. How do I do this?
I am not sure what your exact use case is. Dealing with unloading modules (and possibly reloading them later again) sounds very error-prone. I rather suggest refactoring your code in order to reduce technical debts instead of implementing a workaround.
However, if you want to unload a module just use
del sys.modules[module](anddel globals()[module]if you don't want the imported module available anymore).Note: I shortened your variable names for better readability in this example context.
Without knowing where your conflicts are, if in your own code, maybe you could avoid conflicts by using aliases.