如何重新加载python子模块?

时间:2016-02-25 23:36:57

标签: python

我正在使用from app import sub加载python(2.7.10)中的子模块,其中sub具有config变量。所以我可以运行print sub.config并查看一堆配置变量。不是超级复杂。

如果我更改脚本中的配置变量,必须有一种方法来重新加载模块并查看更改。我找到了一些说明reload(app.sub)可行的说明,但我收到错误:

NameError: name 'app' is not defined

如果我只做reload(sub),则错误是:

TypeError: reload() argument must be module

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

- 如果我执行import app然后运行

我找到了自动重新加载的说明: Reloading submodules in IPython

但是无法手动重新加载子模块吗?

2 个答案:

答案 0 :(得分:1)

当您from foo import bar时,您的命名空间中现在有一个名为bar的模块对象,因此您可以

from foo import bar

bar.do_the_thing()  # or whatever

reload(bar)

如果您想了解更多有关不同导入表单工作方式的详细信息,我个人认为this answer对我自己特别有帮助。

答案 1 :(得分:0)

使用python3,我尝试这样做:

import importlib
import sys

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