Ens dóna un cas en què volem actualitzar i provar un mòdul de Python sense reiniciar l'intèrpret. Això és especialment útil durant el desenvolupament quan modifiqueu fitxers de mòduls externament i voleu que aquests canvis es reflecteixin immediatament. Python ens permet tornar a carregar un mòdul importat anteriorment mitjançant la funció reload(). Per exemple si heu editat un fitxer d'utilitat utils.py mentre el vostre script s'està executant, la recàrrega us permet tornar a importar el contingut actualitzat sense reiniciar l'intèrpret d'ordres de Python.
Quan hauríeu de tornar a carregar un mòdul?
- Durant la depuració o les proves en directe
- Quan utilitzeu intèrprets interactius com IPython o Jupyter
- Durant el desenvolupament de complements o sistemes modulars
- Per reflectir els canvis fets en fitxers .py externs sense reiniciar la sessió
Recàrrega de mòduls a Python 2.x
A Python 2.x podeu utilitzar directament la funció reload() integrada per tornar a carregar un mòdul que s'ha importat anteriorment.
Pythonimport mymodule # Modify 'mymodule.py' externally here... reload(mymodule)
Explicació:
- mymodule s'importa primer mitjançant import.
- Després de fer canvis externs a mymodule.py cridant a reload(mymodule) es torna a carregar la versió actualitzada sense reiniciar l'intèrpret.
- No cal tornar a importar: reload() funciona en un objecte mòdul ja importat.
Recàrrega de mòduls en Python 3.0 a 3.3
A les versions de Python 3.0 a 3.3, es va eliminar la funció reload() integrada. En comptes d'això, cal importar-lo des del mòdul imp.
Pythonimport mymodule import imp # Modify 'mymodule.py' externally... imp.reload(mymodule)
Explicació:
- Primer s'importa mymodule com de costum.
- El mòdul imp proporciona la funció reload() durant aquest interval de versió.
- Després d'editar mymodule.py imp.reload(mymodule) torna a carregar el mòdul amb els canvis actualitzats.
Nota: el mòdul imp està obsolet a partir de Python 3.4 i se substitueix per importlib.
Recàrrega de mòduls a Python 3.4 i posteriors
A partir de Python 3.4, la manera recomanada de tornar a carregar un mòdul és mitjançant importlib.reload().
Pythonimport mymodule import importlib # Modify 'mymodule.py' externally... importlib.reload(mymodule)
Explicació:
- mymodule s'importa primer normalment.
- A continuació, importlib.reload(mymodule) torna a carregar el mòdul actualitzat.
- Aquesta és la manera actual i oficial de recarregar mòduls a Python 3.4+.
Nota: utilitzeu aquest mètode en tots els scripts i quaderns moderns de Python quan proveu els canvis de mòduls.
el somriure més bonic del món
Es pot descarregar un mòdul a Python?
Actualment, Python no proporciona una manera integrada de descarregar completament un mòdul un cop importat. Un cop carregat un mòdul a la memòria, roman disponible a sys.modules fins que finalitza el programa. Tot i que podeu suprimir un mòdul de sys.modules, això no garanteix la seva eliminació completa de la memòria o que les seves referències hagin desaparegut:
Pythonimport mymodule import sys del sys.modules['mymodule']
Això només eliminarà el mòdul de la memòria cau sys.modules. Si alguna variable o objecte encara fa referència al mòdul, no es descarregarà completament.
Per què no s'admet la descàrrega?
- Python gestiona els mòduls globalment a la memòria.
- La descàrrega dinàmica podria provocar un comportament inconsistent si algunes parts del vostre codi encara contenen referències al mòdul antic.