【问题标题】:How do I reload a python submodule?如何重新加载 python 子模块?
【发布时间】:2016-02-25 23:36:56
【问题描述】:

我正在使用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

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

【问题讨论】:

  • 什么版本的 Python?
  • @KarenClark:一定是 Python2,因为reload() 不在 Python3 中。
  • (已编辑以回答您的问题。)

标签: python


【解决方案1】:

用python3,我试试这个:

import importlib
import sys

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

【讨论】:

    【解决方案2】:

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

    from foo import bar
    
    bar.do_the_thing()  # or whatever
    
    reload(bar)
    

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

    【讨论】:

    • 这种方法总是给我一个错误:“TypeError: reload() argument must be module”
    猜你喜欢
    • 2010-10-01
    • 1970-01-01
    • 2011-09-08
    • 2012-10-19
    • 1970-01-01
    • 2017-07-25
    相关资源
    最近更新 更多