Following up on this question regarding reloading a module, how do I reload a specific function from a changed module?
pseudo-code:
from foo import bar  if foo.py has changed:     reload bar 
                You can't reload a method from a module but you can load the module again with a new name, say foo2 and say bar = foo2. bar to overwrite the current reference.
import importlib import inputs #import the module here, so that it can be reloaded. importlib. reload(inputs) from inputs import A # or whatever name you want. import inputs #import the module here, so that it can be reloaded.
As of today, the proper way of doing this is:
import sys, importlib importlib.reload(sys.modules['foo']) from foo import bar   Tested on python 2.7, 3.5, 3.6.
What you want is possible, but requires reloading two things... first reload(foo), but then you also have to reload(baz) (assuming baz is the name of the module containing the from foo import bar statement).
As to why... When foo is first loaded, a foo object is created, containing a bar object. When you import bar into the baz module, it stores a reference to bar. When reload(foo) is called, the foo object is blanked, and the module re-executed. This means all foo references are still valid, but a new bar object has been created... so all references that have been imported somewhere are still references to the old bar object. By reloading baz, you cause it to reimport the new bar.
Alternately, you can just do import foo in your module, and always call foo.bar(). That way whenever you reload(foo), you'll get the newest bar reference.
NOTE: As of Python 3, the reload function needs to be imported first, via from importlib import reload
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With