您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

根据要求,您能做的最好的就是

>>> 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)

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

我的怀疑(以前的询问类似问题的人的经验作为后盾)是您正在测试模块。有很多方法可以测试模块,而在交互式解释器中手动完成模块是最糟糕的方法之一。将您的一个会话保存到文件中,然后使用doctest进行快速修复。或者,将其写为程序并使用python -i。但是,唯一真正好的解决方案是使用unittest模块。

如果不是那样,那么希望它会更好,而不是更糟。确实没有什么好用的reload(实际上,它已在3.x中删除)。它无法有效工作- 您可能会重新加载模块,但保留以前版本的剩余内容。它甚至不适用于所有类型的模块-扩展模块在重新加载时将无法正确重新加载,有时甚至会严重损坏。

在交互式解释器中使用它的上下文不会对您正在做什么以及真正的最佳解决方案有很多选择。在它外部,有时人们习惯于reload()实现插件等。这充其量是很危险的,并且可以使用exec(我们所处的邪恶领域)或分离的过程来进行不同的操作。

python 2022/1/1 18:36:36 有406人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶