【问题标题】:Python: "de-import", "re-import", "reset import"?Python:“de-import”、“re-import”、“reset import”?
【发布时间】:2017-07-25 10:49:01
【问题描述】:

我调试(在 PyCharm 中)一个脚本。我在断点处停止,然后转到调试控制台窗口,然后从那里调用导入行,如下所示:

import my_util1 from my_utils

然后我调用 my_util1。到目前为止,一切正常。然后我在“my_util1”中改变了一些东西。现在我想调用(更新的)my_util1,但我不能:系统(Python?Pycharm?)“看到”只有以前版本的 my_util1。

除了退出 PyCharm 并重新启动项目之外,是否有可能“重置”(刷新)我之前导入的内容,或者“重新导入”它?

这与动态更改正在调试的实际代码无关。我正在寻找的任务更简单 - 只需撤消“导入”操作,或一次重置/清除/刷新所有“导入”即可。此外,该操作可以在调试器窗口中完成,而不是在代码窗口中。

【问题讨论】:

  • 您在引入新代码时是否重新启动调试器?
  • 不,我不知道。我想,也许有一种方法可以“重新包含”一个功能,就像我包含它一样。我想这是可行的。我错了吗?
  • 看起来我链接的那个答案现在仍然有效,因为这在 PyCharm 中没有完成。
  • 接近但不一样。您链接的答案是关于在不重新启动调试器的情况下动态更改正在调试的实际代码。我的问题只是关于重新包含一个不一定是正在调试的代码的一部分的实用程序。但无论如何,谢谢,似乎这两种可能性都有待开发

标签: python python-3.x include pycharm


【解决方案1】:

sys.modules 可以被操纵来改变 Python 对当前导入内容的看法。引用 Python 文档:

这是一个将模块名称映射到已经加载的模块的字典。这可以被操纵以强制重新加载模块和其他技巧。但是,替换字典不一定会按预期工作,从字典中删除基本项目可能会导致 Python 失败。

示例用法:

import sys
import my_util1 from my_utils

# Now sys.modules['my_utils'] exists and my_util1 is a local name.

del sys.modules['my_utils']

# my_util1 still exists as a local name, but Python has "forgotten" the import.

import my_util1 from my_utils
# This re-imports my_utils and binds the new my_util1.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-09
    • 2013-09-27
    • 2018-11-13
    • 1970-01-01
    • 2012-08-16
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多