2011-06-04 17 views
10

Estoy tratando de entender cómo mi flujo de trabajo puede funcionar con Python y IDLE.¿Cómo volver a cargar el módulo de Python en IDLE?

Supongamos que escribo una función:

def hello(): 
    print 'hello!' 

puedo guardar el archivo como greetings.py. Luego, en IDLE, pongo a prueba la función:

>>> from greetings import * 
>>> hello() 
hello! 

Entonces modificar el programa, y ​​quiere probar hello() nuevo. Entonces yo reload:

>>> reload(greetings) 
<module 'greetings' from '/path/to/file/greetings.py'> 

Sin embargo, el cambio no se recoge. ¿Qué estoy haciendo mal? ¿Cómo recargo un módulo alterado?

He estado leyendo una serie de preguntas relacionadas en SO, pero ninguna de las respuestas me ha ayudado.

+1

'ctrl + f6' reiniciará su sesión también. – Droogans

Respuesta

11

debe rehacer esta línea:

>>> from greetings import *

después de hacer

>>> reload(greetings)

La razón acaba de volver a cargar el módulo no funciona es porque el * efectivamente importada todo el interior el módulo, por lo que debe volver a cargarlos individualmente. Si lo hizo el siguiente se comportaría como se esperaba: el cambio

>>> import greetings 
>>> greetings.hello() 
hello! 

realice en el archivo

>>> reload(greetings) 
<module 'greetings' from 'greetings.py'> 
>>> greetings.hello() 
world! 
1

IDLE tiene un menú para ejecutar el archivo actual. Esto reiniciará el shell ejecutando primero su archivo y volviéndolo a cargar.

+0

O puede presionar f5 en el editor de archivos (inactivo) o simplemente usar ctrl-f6. Toneladas más fáciles – PMARINA

5

Aquí es lo que consigo cuando intento su ejemplo (de una sesión interactiva fresca Python):

>>> from greetings import * 
>>> reload(greetings) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'greetings' is not defined 

Indica el origen del problema. Cuando utiliza from greetings import *, el nombre greetings no se importa en el espacio de nombres global. Por lo tanto, no puede usar reload(greetings) en él.

Para solucionar este problema, intente lo siguiente:

>>> import greetings 
>>> greetings.hello() 
hello 
>>> reload(greetings) 
<module 'greetings' from 'greetings.pyc'> 
>>> greetings.hello() 
hello world 
+2

Creo que en su ejemplo, dejó de lado el hecho de que tanto importó saludos como saludos importados *, por lo que su ejemplo anterior funciona para él. En ese caso, volver a cargar saludos por sí solo no provocaría que se actualice una llamada a hello(), aunque una llamada a greetings.hello() funcionaría correctamente. – Jacinda

+0

Muy buena respuesta, tiene que elegir solo una, lo siento. –

+0

@Jacinda Probablemente estés en lo cierto, he intentado muchas cosas y traté de extraer el comportamiento importante. –

0

En las ventanas, uso concha:> Reiniciar la cáscara o el acceso directo CTRL + F6 para reiniciar y cargar la versión más reciente de la modue

Cuestiones relacionadas