para - modulos python 3
Reimportar un módulo en python mientras es interactivo (3)
De hecho, en Python 3 el módulo imp
está marcado como DEPRECATED. Bueno, al menos eso es cierto para 3.4.
En su lugar, debe utilizarse la función de importlib
módulo importlib
:
Pero tenga en cuenta que esta biblioteca tuvo algunos cambios en la API con las dos últimas versiones menores.
Sé que se puede hacer, pero nunca recuerdo cómo.
¿Cómo puedes reimportar un módulo en python? El escenario es el siguiente: Importe un módulo de forma interactiva y hago pequeños retoques con él, pero luego me encuentro con un error. Arreglo el error en el archivo .py y luego quiero volver a importar el módulo fijo sin salir de Python. Cómo puedo hacerlo ?
En Python 3, reload
ya no es una función incorporada.
Si está usando python 3.4+, debería usar reload
desde la biblioteca importlib
lugar:
import importlib
importlib.reload(some_module)
Si está utilizando python 3.2 o 3.3, debe:
import imp
imp.reload(module)
en lugar. Consulte http://docs.python.org/3.0/library/imp.html#imp.reload
Si está usando ipython
, definitivamente considere usar la extensión de autoreload
:
%load_ext autoreload
%autoreload 2
Esto debería funcionar:
reload(my.module)
De los documentos de Python.
Recargar un módulo previamente importado. El argumento debe ser un objeto de módulo, por lo que se debe haber importado correctamente antes. Esto es útil si ha editado el archivo fuente del módulo usando un editor externo y quiere probar la nueva versión sin dejar el intérprete de Python.
Si está ejecutando Python 3.4 y superior, sí import importlib
, luego haga importlib.reload(nameOfModule)
.
No olvide las advertencias de usar este método:
Cuando se recarga un módulo, se conserva su diccionario (que contiene las variables globales del módulo). Las redefiniciones de nombres anularán las definiciones antiguas, por lo que generalmente esto no es un problema. Si la nueva versión de un módulo no define un nombre que fue definido por la versión anterior, la definición anterior permanece.
Si un módulo importa objetos de otro módulo usando
from ... import ...
, llamar areload()
para el otro módulo no redefine los objetos importados de él. Una forma de evitar esto es volver a ejecutar la instrucción from, otro es para usar nombresimport
y calificados (module.*name*
) en su lugar.Si un módulo crea una instancia de las instancias de una clase, volver a cargar el módulo que define la clase no afecta a las definiciones de los métodos de las instancias; continúan usando la definición de la clase anterior. Lo mismo es cierto para las clases derivadas.