9

I'm loading a submodule in python (2.7.10) with from app import sub where sub has a config variable. So I can run print sub.config and see a bunch of config variables. Not super complex.

If I change the config variables in the script, there must be a way to reload the module and see the change. I found a few instructions that indicated that reload(app.sub) would work, but I get an error:

NameError: name 'app' is not defined

And if I do just reload(sub) the error is:

TypeError: reload() argument must be module

If I do import app I can view the config with print app.sub.config and reload with reload(app)

-- if I do import app and then run

I found instructions to automate reloading: Reloading submodules in IPython

but is there no way to reload a submodule manually?

Community
  • 1
  • 1
Amanda
  • 12,099
  • 17
  • 63
  • 91

3 Answers3

10

With python3,I try this:

import importlib
import sys

def m_reload():
    for k,v in sys.modules.items():
        if k.startswith('your-package-name'):
            importlib.reload(v)
放課後
  • 726
  • 7
  • 15
  • This caused `RuntimeError: dictionary keys changed during iteration` on my end. So I iterate over a copy of the dict items `for k,v in list(sys.modules.items()):` – user1556435 Jun 21 '22 at 07:49
0

When you from foo import bar, you now have a module object named bar in your namespace, so you can

from foo import bar

bar.do_the_thing()  # or whatever

reload(bar)

If you want some more details on how different import forms work, I personally found this answer particularly helpful, myself.

Community
  • 1
  • 1
6c1
  • 392
  • 2
  • 14
0
from importlib import reload
import sys
ls=[]
#making copy to avoid regeneration of sys.modules
for i,j in sys.modules.items():
    r,v=i,j
    ls.append((r,v))

for i in ls:
    if i[0] == 'my_library_name':
        reload(i[1])
  • While this code may solve the question, [including an explanation](//meta.stackexchange.com/q/114762) of how and why this solves the problem would really help to improve the quality of your post, and probably result in more up-votes. Remember that you are answering the question for readers in the future, not just the person asking now. Please [edit] your answer to add explanations and give an indication of what limitations and assumptions apply. – Adrian Mole Sep 18 '22 at 20:19