我有两个自定义包pac1
和pac2
。I用于导入所有的模块,一个一个的导入,修改后的模块一个一个的重新加载,如下:
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)
现在,我了解到我可以批量导入模块并改进代码:
^{pr2}$但这是我能做的最好的吗?我的意思是我能一次把所有的包裹都装上吗?
更新1:我不断修改这些模块。因此,在测试开始时导入它们之后,我可能需要频繁地重新加载修改过的模块以反映更改。这是我重新加载模块的动力。在
更新2:此过程不一定是动态完成的。我只想通过将所有这些reload()
融合为一个,使我的代码更加简洁。在
假设你真的需要重新加载它们,那么你的方法是最好的,因为它是显式的(显式的比隐式的好)。它清楚地表明发生了什么(特别是因为这不是正常情况)
如果您真的需要动态执行,可以尝试如下操作:
在
sys.modules
中有一个模块的全局列表(事实上,这是一个dict)。如果要重新加载全局命名空间中的每个模块,请尝试以下操作:或者,如果您想自己跟踪,只需创建自己的模块列表
mymodules
,并在导入后将每个模块附加到其中。然后可以使用循环来重新加载每个循环。在以下是一种避免在不检查
^{pr2}$globals
的情况下重新加载内置函数的方法:另外,您可以在启动解释器后立即捕获
sys.modules
的状态,并使用类似的布尔操作从重新加载中排除这些状态。在你可以试试this
或者,您可以看看Werkzeug(Flask)是如何做到这一点的,它看起来像是使用
subprocess
来调用自己,或者是代码的主要部分。在相关问题 更多 >
编程相关推荐