gpt4 book ai didi

python - 如何在 Python 中批量重新加载模块?

转载 作者:太空宇宙 更新时间:2023-11-03 12:08:13 25 4
gpt4 key购买 nike

我有2个自定义包pac1pac2。我曾经导入所有模块一个一个并在更改后一个一个地重新加载,就像这样:

from pac1 import mod1
from pac1 import mod2
from pac1 import mod3
from pac2 import mod4
from pac2 import mod5

reload(mod1)
reload(mod2)
reload(mod3)
reload(mod4)
reload(mod5)

现在,我了解到我可以批量导入模块并将代码改进为:

from pac1 import *
from pac2 import *

reload(mod1)
reload(mod2)
reload(mod3)
reload(mod4)
reload(mod5)

但这是我能做的最好的吗? 我的意思是我可以一次重新加载所有包吗?

UPDATE1:我一直在修改这些模块。因此在测试开始时导入它们之后,我可能需要频繁地重新加载修改后的模块以反射(reflect)更改。这是我重新加载模块的动力。

UPDATE2:这个过程不一定是动态完成的。我只是想通过将所有这些 reload() 合并为一个来使我的代码更简洁。

最佳答案

sys.modules 中有一个全局模块列表(实际上,它是一个字典)。如果你想重新加载全局命名空间中的每个模块,试试这个:

import sys,imp
def reloader(globaldict):
reloadkeys = set(globaldict)&set(sys.modules)
for key in reloadkeys:
if imp.is_builtin(key) == 0:
reload(sys.modules[key])

reloader(locals())

或者,如果您想自己跟踪,只需创建自己的模块列表 mymodules,并在导入后将每个模块附加到其中。然后您可以使用循环重新加载每个。


这是一种避免在不检查 globals 的情况下重新加载内置函数的方法:

import sys,imp
def reloader(globaldict):
for key in sys.modules:
if imp.is_builtin(key) == 0:
reload(sys.modules[key])

此外,您可以在启动解释器后立即捕获 sys.modules 的状态,并使用类似的 bool 操作将它们从重新加载中排除。

关于python - 如何在 Python 中批量重新加载模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19384344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com