如何调试从Jupyter/IPython笔记本运行的外部.py函数

如何调试从Jupyter/IPython笔记本运行的外部.py函数,python,debugging,ipython,jupyter-notebook,spyder,Python,Debugging,Ipython,Jupyter Notebook,Spyder,我的Jupyter/IPython笔记本在外部.py中执行函数 我需要在这些函数中设置断点,检查变量,单步等等 使用print语句和抛出异常的组合来提前退出单元格是不实际的 我需要一些工作流程 是否可以连接一些第三方编辑器/IDE来查看.py,并以某种方式将其连接到Jupyter/IPython正在使用的Python运行时 因此,如果我使用IDE在external.py中设置断点,并在笔记本中执行遇到该断点的单元格,我可以继续从IDE中手动导航 编辑:我找到了 编辑 是否可以连接一些第三方编辑器

我的Jupyter/IPython笔记本在外部.py中执行函数

我需要在这些函数中设置断点,检查变量,单步等等

使用
print
语句和抛出异常的组合来提前退出单元格是不实际的

我需要一些工作流程

是否可以连接一些第三方编辑器/IDE来查看.py,并以某种方式将其连接到Jupyter/IPython正在使用的Python运行时

因此,如果我使用IDE在external.py中设置断点,并在笔记本中执行遇到该断点的单元格,我可以继续从IDE中手动导航

编辑:我找到了

编辑 是否可以连接一些第三方编辑器/IDE来查看.py 并以某种方式将其连接到Jupyter/IPython正在使用的Python运行时

是的,这是可能的

作为第三方Python IDE使用。 您可以使用iPython运行时并排打开文件。可以使用快捷键将外部文件中的定义直接发送到提示符,并使用标准python调试器pdb从iPython提示符设置断点、单步执行和检查变量

自动完成工作良好。只需编写
import XXX
即可使Emacs了解
XXX
模块中的所有功能

以下是一个示例屏幕截图:

以下是我进入截图的步骤。*

  • 在Emacs上打开文件playerd.py
  • C-C-p
    启动iPython进程并将文件连接到该进程。请注意,iPython进程功能齐全。我可以调用它的所有神奇方法
  • M-mdb
    将断点包含在我想要的行中(以pdb导入的形式)
  • C-M-x
    将定义发送到iPython提示符。请注意,在屏幕截图中,我正在调用
    unique\u everseed
    ,但从未在提示符中键入它。定义是直接从文件发送的(这就是为什么我们有一个空单元格,作为Emacs做了一些事情的视觉反馈)
  • 从iPython提示符执行函数,以触发断点。我得到信息,告诉我我是哪一行,并自动进入调试器
  • 我检查变量,看看发生了什么
  • 我按
    n
    进入下一条指令
  • 我单击文件名(在提示符处显示为红色),它会将光标直接带到playerly.py文件中的那一行。注意,行号旁边的黑色三角形告诉我步进器在哪里。很好
  • 现在,我甚至还没有触及Emacs能提供什么的表面。 如果你对此感兴趣,我建议你调查一下。它真的很强大,有一个伟大的、非常有帮助的、活跃的社区

    为了让所有Python配置都开箱即用,而不必自己配置任何东西,只需安装一个流行的Emacs发行版(就像anaconda对Python的意义,Spacemacs对Emacs的意义一样)。安装说明可在链接下找到

    使用Emacs编辑iPython笔记本电脑。

    一个名为EIN(Emacs iPython笔记本电脑)的包“提供了一个iPython笔记本电脑客户端和Emacs中的集成REPL。” 要使其正常工作,请使用
    iPython notebook
    从任何终端打开iPython notebook服务器,并调用函数
    ein:notebooklist

    更多信息可在项目页面和Spacemacs iPython笔记本层页面中找到

    特别是,从EIN文档中:

  • 复制/粘贴单元格,甚至从不同的笔记本电脑复制/粘贴单元格
  • 控制台集成:您可以通过控制台应用程序轻松连接到内核。这使您能够在同一内核中开始调试。甚至可以通过ssh连接到控制台
  • IPython内核可以“连接”到任何Emacs缓冲区。这使您能够使用与笔记本相同的内核计算缓冲区或缓冲区。这些缓冲区中提供了工具提示帮助、帮助浏览器和代码完成等笔记本软件
  • 跳转到定义(通过在对象上点击M-,转到定义)
  • 上述简单iPython+文件工作流的所有功能都可用于iPython笔记本(*.ipynb)


    屏幕截图

    在Jupyter中,您可以通过在下面添加两行作为断点来使用python调试器

    import pdb
    pdb.set_trace()
    
    代码执行将在此步骤暂停,并为调试python代码提供文本框。我附上了相同的截图

    除了打印变量外,您还可以参考pdb了解可以执行的操作


    我们刚刚发布了Jupyter笔记本电脑Python可视化调试器的第一个版本,这可能会引起人们的兴趣。您可以找到详细信息。

    (免责声明:我是首席开发人员)

    我能够获得PTV的这种调试体验,但注意到一个小麻烦:感谢这个信息丰富的答案。不幸的是,我需要一个IPython笔记本的解决方案,而不仅仅是IPython。@Pi您的问题要求提供一个将.py文件链接到IPython内核的解决方案。这就是我提供的。无论如何,我已经将解决方案扩展到笔记本电脑。这不是一个很好的答案,因为如果你想调试笔记本电脑从另一个文件调用的代码,你必须进入并编辑该代码。最好有一个等价的
    b library.py:22
    ,可以在Jupyter中使用,而不必编辑
    library.py