Quero descarregar todos os submódulos que pertencem a um módulo específico, porque entra em conflito com outro módulo. Aqui está o que eu faço:
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]
O problema é que isso exclui a variável mainmodule_submodule
criada pelo loop for em vez do módulo que está armazenado com o valor de mainmodule_submodule
. Como eu faço isso?
Não tenho certeza de qual é o seu caso de uso exato. Lidar com o descarregamento de módulos (e possivelmente recarregá-los mais tarde) parece muito sujeito a erros. Prefiro sugerir refatorar seu código para reduzir dívidas técnicas em vez de implementar uma solução alternativa.
Porém, se quiser descarregar um módulo é só usar
del sys.modules[module]
(edel globals()[module]
se não quiser mais o módulo importado disponível).Nota: encurtei os nomes das variáveis para melhor legibilidade neste contexto de exemplo.
Sem saber onde estão seus conflitos, se estiver em seu próprio código, talvez você possa evitar conflitos usando aliases.