![](https://secure.gravatar.com/avatar/5a7d8a4d756bb1f1b2ea729a7e5dcbce.jpg?s=120&d=mm&r=g)
Ryan Krauss wrote:
If you only want to reload one or two modules that you are developing, you can try two approaches. One is to use the %macro command to combined reload with run. The other is to hard code into your scripts to reload modules that you are developing after you have imported them.
Fernando may have better advice.
Not really: what you describe is pretty much what I always do. Many of my 'top-level' scripts which use modules I'm in the middle of modifying, look like: import foo reload(foo) foo.dostuff() It's not terribly elegant, but it works. And as John said, wholesale reloading of everything can be very expensive, so it's not a good idea as a default. Having said that, I should mention dreload(), part of ipython. It _tries_ to do a recursive ('deep') reload of a given module, and I know many ipython users love it. Given that there is no way for any tool to guess, out of the many modules in memory, which ones the user actually _wants_ reloaded, I think the manual solution is not all that bad. I should finally add that extension modules can NOT be reoloaded, to the best of my knowledge. I just checked what Idle does: it runs the user's code in a separate process altogether: fperez 10662 1.4 0.9 15192 9936 pts/15 S+ 09:54 0:00 /usr/bin/python /usr/bin/idle fperez 10673 1.0 0.5 13884 5360 pts/15 Sl+ 09:55 0:00 /usr/bin/python -c __import__('idlelib.run').run.main(True) 8833 And after hitting F5: fperez 10662 0.9 0.9 15192 9936 pts/15 S+ 09:54 0:00 /usr/bin/python /usr/bin/idle fperez 10691 1.6 0.5 13884 5360 pts/15 Sl+ 09:55 0:00 /usr/bin/python -c __import__('idlelib.run').run.main(True) 8833 Notice the process number for the user code execution has just changed. In summary, Idle's F5 is equivalent to John's solution, to use !python foo.py. Unfortunately because this runs in a separate process, you lose nice exception tracebacks, integrated debugging, etc. It would not be impossible to write a little magic that does something similar for ipython, while retaining the settings for exceptions, pdb and other things. I'll keep it in mind for a future release, unless somebody beats me to it. Cheers, f