gpt4 book ai didi

python - 从控制台重新加载 python 模块的正确方法

转载 作者:IT老高 更新时间:2023-10-28 22:07:19 26 4
gpt4 key购买 nike

我正在从 python 控制台进行调试,并且希望每次进行更改时都重新加载一个模块,这样我就不必退出控制台并重新输入它。我在做:

>>> from project.model.user import *
>>> reload(user)

但我收到:

>>>NameError: name 'user' is not defined

重新加载整个用户类的正确方法是什么?有没有更好的方法来做到这一点,也许在调试时自动更新?

谢谢。

最佳答案

如你所问,你能做的最好的就是

>>> from project.models.user import *
>>> import project # get module reference for reload
>>> reload(project.models.user) # reload step 1
>>> from project.models.user import * # reload step 2

如果您直接使用用户模块,而不是使用 import * (这几乎不是正确的做法),那会更好更干净。那么它只是

>>> from project.models import user
>>> reload(user)

这会做你想做的事。但是,它不是很好。如果你真的需要如此频繁地重新加载模块,我不得不问:为什么?

我的怀疑(以前有人问过类似问题的经验证实了这一点)是您正在测试您的模块。有很多方法可以测试模块,而在交互式解释器中手动测试是最糟糕的方法之一。将您的一个 session 保存到一个文件并使用 doctest , 快速修复。或者,将其写成程序并使用 python -i。不过,唯一真正出色的解决方案是使用 unittest模块。

如果不是这样,希望它会更好,而不是更糟。 reload 确实没什么用处(事实上,它在 3.x 中已被删除)。它不能有效地工作——你可能会重新加载一个模块,但会留下以前版本的剩余部分。它甚至不适用于所有类型的模块——扩展模块在重新加载时无法正确重新加载,有时甚至会严重损坏。

在交互式解释器中使用它的上下文不会留下很多关于您正在做什么以及真正的最佳解决方案是什么的选择。在它之外,有时人们使用 reload() 来实现插件等。这充其量是危险的,并且经常可以使用 exec 以不同的方式完成(啊,我们发现的邪恶领域我们自己在),或一个隔离的过程。

关于python - 从控制台重新加载 python 模块的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2534480/

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