Provides a reload() function that acts recursively.
Python’s normal python:reload() function only reloads the module that it’s passed. The reload() function in this module also reloads everything imported from that module, which is useful when you’re changing files deep inside a package.
To use this as your default reload function, type this for Python 2:
import __builtin__
from IPython.lib import deepreload
__builtin__.reload = deepreload.reload
Or this for Python 3:
import builtins
from IPython.lib import deepreload
builtins.reload = deepreload.reload
A reference to the original python:reload() is stored in this module as original_reload, so you can restore it later.
This code is almost entirely based on knee.py, which is a Python re-implementation of hierarchical module import.
Return the package that an import is being performed in. If globals comes from the module foo.bar.bat (not itself a package), this returns the sys.modules entry for foo.bar. If globals is from a package’s __init__.py, the package’s entry in sys.modules is returned.
If globals doesn’t come from a package or a module in a package, or a corresponding entry is not found in sys.modules, None is returned.
altmod is either None or same as mod
mod.{subname} = submod
Handle ‘from module import a, b, c’ imports.
Replacement for __import__()
Replacement for reload().
Recursively reload all modules used in the given module. Optionally takes a list of modules to exclude from reloading. The default exclude list contains sys, __main__, and __builtin__, to prevent, e.g., resetting display, exception, and io hooks.