Module: lib.deepreload
¶
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.
9 Functions¶
-
IPython.lib.deepreload.
replace_import_hook
(new_import)¶
-
IPython.lib.deepreload.
get_parent
(globals, level)¶ parent, name = get_parent(globals, level)
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.
-
IPython.lib.deepreload.
load_next
(mod, altmod, name, buf)¶ mod, name, buf = load_next(mod, altmod, name, buf)
altmod is either None or same as mod
-
IPython.lib.deepreload.
import_submodule
(mod, subname, fullname)¶ m = import_submodule(mod, subname, fullname)
-
IPython.lib.deepreload.
add_submodule
(mod, submod, fullname, subname)¶ mod.{subname} = submod
-
IPython.lib.deepreload.
ensure_fromlist
(mod, fromlist, buf, recursive)¶ Handle ‘from module import a, b, c’ imports.
-
IPython.lib.deepreload.
deep_import_hook
(name, globals=None, locals=None, fromlist=None, level=-1)¶ Replacement for __import__()
-
IPython.lib.deepreload.
deep_reload_hook
(m)¶ Replacement for reload().
-
IPython.lib.deepreload.
reload
(module, exclude=('sys', 'os.path', 'builtins', '__main__'))¶ 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.