Package: reloader
This library implements a dependency-based module reloader for Python.  Unlike
the builtinreload()function, this reloader will reload the requested
moduleand all other modules that are dependent on that module.A detailed discussion of the reloader’s implementation is available here:http://www.indelible.org/ink/python-reloading/UsageThe reloader works by tracking dependencies between imported modules.  It must
first be enabled in order to track those dependencies.  The reloader has no
dependency information for modules that were imported before it was enabled or
after it is disabled, so you’ll probably want to enable the reloader early in
your application’s startup process.import reloader
reloader.enable()

# Import additional modules
import module1
import module2To manually reload an imported module, pass it to the reloader’sreload()method:import example
reloader.reload(example)Note that you must pass the module object itself and not a string containing
the module’s name.  If you only have the module’s name, you can fetch the
module object from the globalsys.modulesdictionary:reloader.reload(sys.modules['example'])You can also query a module’s dependencies for informational or debugging
purposes:reloader.get_dependencies(example)You can disable the reloader’s dependency tracking at any time:reloader.disable()Blacklisting ModulesThere may be times when you don’t want a module and its dependency hierarchy
to be reloaded.  The module might rarely change and be expensive to import.
To support these cases, you can explicitly “blacklist” modules from the
reloading process using theblacklistargument toenable().reloader.enable(blacklist=['os', 'ConfigParser'])The blacklist can be any iterable listing the fully-qualified names of modules
that should be ignored.  Note that blacklisted modules will still appear in
the dependency graph for completeness; they will just not be reloaded.An Interactive ExampleThis example demonstrates how easily the reloader can be used from the
interactive Python interpretter.  Imagine you have the moduleexample.pyopen in a text editor, and it contains the following:print "I am example.py"Our interactive session starts like this:>>> import reloader
>>> reloader.enable()
>>> import example
I am example.pyNow modifyexample.pyin your text editor.  You can then reload theexamplein your interactive session:>>> reloader.reload(example)
I am the modified example.pyThis is a simplistic example that doesn’t fully demonstrate the power of the
reloader’s dependency-based module tracking, but it hopefully illustrates the
basic usage and utility of the system.The __reload__() CallbackIf a module has a__reload__()function, it will be called with a copy of
the original module’s dictionary after it has been reloaded.  This provides a
convenient mechanism for preserving state between reloads.Consider a module namedcountsthat contains the following code:COUNTER = 0The module’sCOUNTERvariable will be reset to 0 when the module is
reloaded:>>> import counts
>>> counts.COUNTER += 1
>>> counts.COUNTER
1
>>> reloader.reload(counts)
>>> counts.COUNTER += 1
1We can preserve the value ofCOUNTERacross reloads by adding a__reload__()function to thecountsmodule:def __reload__(state):
    global COUNTER
    COUNTER = state['COUNTER']Now when we reloadcounts:>>> import counts
>>> counts.COUNTER += 1
>>> counts.COUNTER
1
>>> reloader.reload(counts)
>>> counts.COUNTER += 1
>>> counts.COUNTER
2