Reloading submodules in IPython
Question: Currently I am working on a python project that contains sub modules and uses
numpy/scipy. Ipython is used as interactive console. Unfortunately I am not
very happy with workflow that I am using right now, I would appreciate some
advice.

In IPython, the framework is loaded by a simple `import` command. However, it
is often necessary to change code in one of the submodules of the framework.
At this point a model is already loaded and I use IPython to interact with it.

Now, the framework contains many modules that depend on each other, i.e. when
the framework is initially loaded the main module is importing and configuring
the submodules. The changes to the code are only executed if the module is
reloaded using `reload(main_mod.sub_mod)`. This is cumbersome as I need to
reload all changed modules individually using the full path. It would be very
convenient if `reload(main_module)` would also reload all sub modules, but
without reloading numpy/scipy..


Answer: IPython comes with some automatic reloading magic:

    
    
    %load_ext autoreload
    %autoreload 2
    

It will reload all changed modules every time before executing a new line. The
way this works is slightly different than `dreload`. Some caveats apply, type
`%autoreload?` to see what can go wrong.

* * *

If you want to always enable this settings, modify your IPython configuration
file `~/.ipython/profile_default/ipython_config.py`[1] and appending:

    
    
    c.InteractiveShellApp.extensions = ['autoreload']     
    c.InteractiveShellApp.exec_lines = ['%autoreload 2']
    

_Credit to @Kos via a comment below._

[1] If you don't have the file `~/.ipython/profile_default/ipython_config.py`,
you need to call `ipython profile create` first. Or the file may be located at
`$IPYTHONDIR`.

