Reputation: 1919
autoreload doesn't work for me in subdirs at all.
dir structure:
run.ipynb
oof.py
pertussis/
|-- __init__.py
on run.ipynb I have (running with notebook):
from pertussis import *
check() #defined in the module
this doesn't work. I tried everything. I added the autoreload magic inside code, inside config file, everywhere. I also added the folder of the module to the sys.path list. Never reloaded. I tried reloading a regular file oof.py
from the notebook, instead of the module directly.
on oof.py I have:
from pertussis import *
def check_2():
print ("Hello")
What happend now is that check_2 was autoreloaded successfully, but check from the module still didn't reload.
Nothing seems to work, I am lost.
Upvotes: 8
Views: 18395
Reputation: 638
I don't believe this is an iPython issue, but is due to the nature of from
imports.
The following is from Learning Python Oreilly, p798 (5th ed.)
...because
from
copies (assigns) names when run, there's no link back to the modules where the names came from. Names imported withfrom
simply become references to objects, which happen to have been referenced by the same names in the importee when thefrom
ran.
A workaround is to use import
and name qualification. For example:
import pertussis
pertussis.check()
Then in oof.py:
import pertussis # now must use full name qualification
def check_2():
print ("Hello")
Upvotes: 5
Reputation: 552
Sorry for the late response, I've just stumbled upon a similar problem.
In your run.ipynb, have you tried:
import pertussis
pertussis.check()
Or
%load_ext autoreload
%autoreload 1
then
%aimport pertussis
check = pertussis.check # optional shortcut
check()
Upvotes: 4