简体   繁体   中英

ipython autoreload doesn't work

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.

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()

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 with from simply become references to objects, which happen to have been referenced by the same names in the importee when the from 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")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM