Temos um caso em que queremos atualizar e testar um módulo Python sem reiniciar o interpretador. Isso é especialmente útil durante o desenvolvimento quando você modifica arquivos de módulo externamente e deseja que essas alterações sejam refletidas imediatamente. Python nos permite recarregar um módulo importado anteriormente usando a função reload(). Por exemplo se você editou um arquivo utilitário utils.py enquanto seu script estava em execução, o recarregamento permite reimportar o conteúdo atualizado sem reiniciar o shell Python.
Quando você deve recarregar um módulo?
- Durante a depuração ou teste ao vivo
- Ao usar interpretadores interativos como IPython ou Jupyter
- Ao desenvolver plugins ou sistemas modulares
- Para refletir as alterações feitas em arquivos .py externos sem reiniciar a sessão
Recarregando Módulos em Python 2.x
No Python 2.x você pode usar diretamente a função reload() integrada para recarregar um módulo que foi importado anteriormente.
alfabeto numeradoPython
import mymodule # Modify 'mymodule.py' externally here... reload(mymodule)
Explicação:
- mymodule é importado primeiro usando import.
- Depois de fazer alterações externas em mymodule.py, chamar reload(mymodule) recarrega a versão atualizada sem reiniciar o interpretador.
- Não há necessidade de reimportar — reload() funciona em um objeto de módulo já importado.
Recarregando Módulos em Python 3.0 a 3.3
Nas versões 3.0 a 3.3 do Python, a função reload() integrada foi removida. Em vez disso, você precisa importá-lo do módulo imp.
Pythonimport mymodule import imp # Modify 'mymodule.py' externally... imp.reload(mymodule)
Explicação:
- Primeiro mymodule é importado normalmente.
- O módulo imp fornece a função reload() durante este intervalo de versões.
- Após a edição mymodule.py imp.reload(mymodule) recarrega o módulo com alterações atualizadas.
Nota: O módulo imp está obsoleto a partir do Python 3.4 e foi substituído por importlib.
Recarregando módulos em Python 3.4 e superior
A partir do Python 3.4, a maneira recomendada de recarregar um módulo é usando importlib.reload().
Pythonimport mymodule import importlib # Modify 'mymodule.py' externally... importlib.reload(mymodule)
Explicação:
- mymodule é primeiro importado normalmente.
- Então importlib.reload(mymodule) recarrega o módulo atualizado.
- Esta é a forma atual e oficial de recarregar módulos em Python 3.4+.
Observação: use esse método em todos os scripts e notebooks Python modernos ao testar alterações de módulo.
Você pode descarregar um módulo em Python?
Atualmente o Python não fornece uma maneira integrada de descarregar totalmente um módulo depois de importado. Depois que um módulo é carregado na memória, ele permanece disponível em sys.modules até o programa terminar. Embora você possa excluir um módulo de sys.modules, isso não garante sua remoção completa da memória ou que suas referências desapareceram:
Pythonimport mymodule import sys del sys.modules['mymodule']
Isso removerá apenas o módulo do cache sys.modules. Se alguma variável ou objeto ainda estiver referenciando o módulo, ele não será totalmente descarregado.
Por que o descarregamento não é compatível?
- Python gerencia módulos globalmente na memória.
- O descarregamento dinâmico pode levar a um comportamento inconsistente se partes do seu código ainda contiverem referências ao módulo antigo.