Reloading All Loaded Modules
Credit: Sébastien Keim
Problem
When you repeatedly run a test script during an interactive session, it always uses the first version of the modules you are developing, even if you made changes to the code. You need to ensure that modules are reloaded.
Solution
There are a few ways to accomplish this goal. Here’s a solution that is simple and drastic, but it may not work with integrated development environments (IDEs):
import sys sys.modules.clear( )
And here is a solution that is a bit more careful and is compatible with IDEs:
import sys
if globals( ).has_key('init_modules'):
# second or subsequent run: remove all but initially loaded modules
for m in sys.modules.keys( ):
if m not in init_modules:
del(sys.modules[m])
else:
# first run: find out which modules were initially loaded
init_modules = sys.modules.keys( )Discussion
When you create a Python module, you can use a test script that
imports your module. But you have probably noticed that when you
repeatedly run the test script inside a given interactive session, it
always uses the first version of your module, even if you made
changes in the code. This is because the
import statement checks if the module is already
in memory and does the actual importing only if this is the first
time the module is used. This is an important optimization that lets
you use the import statement freely, but it does
get in the way in such development situations.
You can use the
reload function, but this is difficult if you ...