logo

Recàrrega de mòduls en Python

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.

Python
import 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.

Python
import 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().

Python
import 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:

Python
import 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.