2009-08-10 26 views
205

Sé que se puede hacer, pero nunca recuerdo cómo.Reimportar un módulo en python mientras es interactivo

¿Cómo se puede volver a importar un módulo en python? El escenario es el siguiente: importo un módulo de forma interactiva y jugueteo con él, pero luego me aparece un error. Repare el error en el archivo .py y luego deseo volver a importar el módulo fijo sin salir de Python. Cómo puedo hacerlo ?

+1

Posible duplicado de [¿Cómo descargo (recargo) un módulo de Python?] (Http://stackoverflow.com/questions/437589/how-do-i-load-reload-a-python-module) – Walter

+0

[ reimportar el módulo de python] (https://stackoverflow.com/a/437591/6521116) –

Respuesta

204

Esto debería funcionar:

reload(my.module) 

Desde el Python docs

Actualizar un módulo importado anteriormente. El argumento debe ser un objeto de módulo, por lo que debe haberse importado con éxito antes. Esto es útil si ha editado el archivo fuente del módulo utilizando un editor externo y desea probar la nueva versión sin abandonar el intérprete de Python.

+48

** No olvide las advertencias sobre el uso de este método **: Cuando se recarga un módulo, su diccionario (que contiene las variables globales del módulo) **Es retenido** . 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. – nosklo

+46

** No olvide las advertencias sobre el uso de este método **: si un módulo importa objetos de otro módulo usando 'from ... import ...', llamar 'reload()' para el otro módulo ** no lo hace redefinir los objetos importados de él ** - una forma de evitar esto es volver a ejecutar la declaración 'from', otra es usar' import' y nombres calificados ('module. * name *') en su lugar. – nosklo

+41

** No olvide las advertencias sobre el uso de este método **: si un módulo instancia instancias de una clase, volver a cargar el módulo que define la clase ** no afecta las definiciones de método de las instancias ** - continúan ** usar la definición de clase * old * **. Lo mismo es cierto para las clases derivadas. – nosklo

138

En python 3, reload ya no es una función incorporada.

Si está utilizando Python 3.4+ se debe utilizar reload de la biblioteca importlib lugar:

import importlib 
importlib.reload(some_module) 

Si está utilizando Python 3.2 o 3.3 se debe:

import imp 
imp.reload(module) 

lugar. Ver http://docs.python.org/3.0/library/imp.html#imp.reload

Si está utilizando ipython, definitivamente considerar el uso de la extensión autoreload:

%load_ext autoreload 
%autoreload 2 
+0

Aunque mucho código de Python está escrito en Python 2, Python 3 se está convirtiendo en una opción más viable todos los días. ¡Gracias por el consejo! –

+32

'imp.reload' está en desuso desde Python 3.4, en su lugar use [' importlib.reload' function] (http://docs.python.org/3.4/library/importlib.html#importlib.reload). – jfs

41

En realidad, en Python 3 del módulo imp está marcado como obsoletos. Bueno, al menos eso es cierto para 3.4.

lugar la función reload del módulo importlib se debe utilizar:

https://docs.python.org/3/library/importlib.html#importlib.reload

Pero tenga en cuenta que esta biblioteca tenía algunas API-cambios con las dos últimas versiones de menor importancia.

Cuestiones relacionadas