繁体   English   中英

如何重新加载 python 子模块?

[英]How do I reload a python submodule?

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

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

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

from foo import bar

bar.do_the_thing()  # or whatever

reload(bar)

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

使用python3,我试试这个:

import importlib
import sys

def m_reload():
    for k,v in sys.modules.items():
        if k.startswith('your-package-name'):
            importlib.reload(v)
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])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM