IPython notebook: how to reload all modules in a specific Python file?

Use importlib!

import importlib
importlib.reload(my_awesome_python_script)

So when you do changes in your my_awesome_python_script in the backend, no need to restart the kernel or re-run the entire notebook again. Just re-run this cell. This is extremely useful if you did a lot of work on memory heavy datasets


From the ipython docs:

In [1]: %load_ext autoreload

In [2]: %autoreload 2

In [3]: from foo import some_function

In [4]: some_function()
Out[4]: 42

In [5]: # open foo.py in an editor and change some_function to return 43

In [6]: some_function()
Out[6]: 43

You can also configure the auto reload to happen automatically by doing this: ipython profile create

and adding the following to ~/.config/ipython/profile_default/ipython_config.py

c.InteractiveShellApp.extensions = ['autoreload']
c.InteractiveShellApp.exec_lines = ['%autoreload 2']
c.InteractiveShellApp.exec_lines.append('print("Warning: disable autoreload in ipython_config.py to improve performance.")')

Note: If you rename a function, you need to rerun your import statement