【问题标题】:How to do debugging in a Python console without reloading the package in PyCharm?如何在 Python 控制台中进行调试而不在 PyCharm 中重新加载包?
【发布时间】:2014-10-16 07:31:55
【问题描述】:

PyCharm 运行一个交互式 Python 控制台(在我的例子中是 IPython),但是当我对代码进行更改时,PyCharm 不会重新导入我一直在编辑的模块,因此控制台会运行旧代码。

更重要的是,如果我通过Run setup.py Task 安装了旧包,Python 会在控制台中import mymodule as mm 之后导入旧包。

一种解决方法是编辑文件中的代码并在没有交互式控制台的情况下重新运行它,但这不是一个非常优雅的解决方案。

如何使交互式控制台保持最新并即时更新模块?

【问题讨论】:

  • 我不知道这是否回答了你的问题,但是在 python 控制台中你可以输入reload(module),作为模块一个模块对象。我觉得它很方便。
  • 我要为 Python 3 添加它,它是:import imp; imp.reload(module)
  • 那么,问题解决了吗?
  • @Anton 请注意,截至 2020 年 9 月 18 日,在 pyton3.8 中,包 imp 已弃用,取而代之的是 importlib,请参阅下面的查菲尔森回答

标签: python debugging module pycharm


【解决方案1】:

我目前在 Pycharm 4.0.6 中使用 Python 3.4.3,并在上面 Anton 的回答的基础上,将以下内容添加到我的启动脚本中:

from importlib import reload

那么您可以随意使用 'reload(my_module)' - 但是这将是每次重新加载的手动操作,我不知道如果这是您真正想要的完全自动化的解决方案。

【讨论】:

  • 我相信 IPython 的 deepreload 可以满足您的需求,尽管您可能需要添加一个导入钩子以确保它递归地重新加载依赖模块。
【解决方案2】:

IPython 有一个非常好的函数,可以递归地重新加载所有模块。它被称为dreload,来自深度重载。您只需在控制台中手动运行:

dreload(myCoolModule)

它是手动的,但它不会打扰我。如果我没记错的话,如果你删除命名空间导入,它就不起作用:from myCoolModule import *

【讨论】:

    猜你喜欢
    • 2018-12-16
    • 2020-08-31
    • 2019-12-04
    • 2017-03-04
    • 1970-01-01
    • 2018-04-01
    • 2020-03-22
    • 2016-10-22
    • 1970-01-01
    相关资源
    最近更新 更多