IPython autoreload changes in subdirectory
Question: I launch IPython from the main folder `/project`. Now if I make changes in the
file `/project/tests/some_module.py`, the changes fail to be autoreloaded in
IPython. Also, I get the following message after I save the changes and want
to run some other script in the prompt:

    
    
    [autoreload of some_module failed: Traceback (most recent call last):
      File "/usr/lib/python2.7/dist-packages/IPython/extensions/autoreload.py", line 229, in check
        superreload(m, reload, self.old_objects)
    ImportError: No module named some_module]
    

It seems it detects changes were made inside folder `/tests` but it cannot
import it. Can someone help me with this?

**Edit:** For better clarification: I launch IPython from the terminal in the
main folder. In this folder, I have another folder `tests`. Inside `tests` I
have two python files:

**some_module.py** :

    
    
    def hello_world():
      print "Hello World!!!"
    

**use_some_module.py** :

    
    
    from some_module import hello_world
    
    hello_world()
    

Once I launched IPython, further changes in _some_module.py_ won't be loaded
in IPython. For example, if I add a second `print "Hello Earth!!!"` in the
definition of `hello_world()`, and run `run tests/use_some_module.py`, I get
the error message shown above, and will only get the `"Hello World!!!"` print.

**Edit2** : I would like a solution where I don't need to either change the
working directory, or adding any search paths manually. I want it to be loaded
automatically with autoreload.


Answer: If all you need is to reload a changed file in Python just do the following:

    
    
    from main import some_module
    ....
    reload(some_module)
    

But if your reload purposes are really eager, you can do the following (taken
from [this question](http://stackoverflow.com/questions/5364050/reloading-
submodules-in-ipython)):

    
    
    %load_ext autoreload
    %autoreload 2
    

The previous code will reload all changed modules every time before executing
a new line.

_NOTE:_ You can also check [dreload](http://ipython.org/ipython-
doc/rel-0.10.1/html/interactive/reference.html#dreload) which does a recursive
reload of a module, and [%run](http://ipython.org/ipython-
doc/rel-0.10.1/html/interactive/tutorial.html#the-run-magic-command) which
allows you to run any python script and load all of its data directly into the
interactive namespace.

Hope it helps,

