Important

This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.

If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer to its documentation (LTS is the long term support release).

Module: lib.deepreload

Provides a reload() function that acts recursively.

Python’s normal 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 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__', 'numpy', 'numpy._globals'))

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.