如何重新加载python子模块?

Ama*_*nda 5 python

我加载在Python(2.7.10)与子模块from app import sub,其中sub有一个config变量。因此,我可以运行print sub.config并查看一堆配置变量。不是超级复杂。

如果我在脚本中更改了配置变量,则必须有一种方法可以重新加载模块并查看更改。我发现了一些说明可以使用的指令reload(app.sub),但出现错误:

NameError: name 'app' is not defined
Run Code Online (Sandbox Code Playgroud)

如果我这样做reload(sub),错误是:

TypeError: reload() argument must be module
Run Code Online (Sandbox Code Playgroud)

如果可以,import app我可以使用查看配置print app.sub.config并重新加载reload(app)

-如果我这样做import app然后跑步

我找到了自动重新加载的说明: 在IPython中重新加载子模块

但是没有办法手动重新加载子模块吗?

小智 8

使用 python3,我试试这个:

import importlib
import sys

def m_reload():
    for k,v in sys.modules.items():
        if k.startswith('your-package-name'):
            importlib.reload(v)
Run Code Online (Sandbox Code Playgroud)


小智 0

当你from foo import bar,你现在有一个在你的命名空间中命名的模块对象bar,所以你可以

from foo import bar

bar.do_the_thing()  # or whatever

reload(bar)
Run Code Online (Sandbox Code Playgroud)

如果您想了解有关不同导入表单如何工作的更多详细信息,我个人发现这个答案特别有帮助。

  • 这种方法总是给我一个错误:“TypeError:reload()参数必须是模块” (6认同)