如何调试从Jupyter / IPython notebook

时间:2016-09-13 08:44:56

标签: python debugging ipython jupyter-notebook spyder

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

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

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

我需要某种工作流程。

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

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

编辑:我找到了https://pypi.python.org/pypi/ipdb https://www.quora.com/What-are-your-favorite-tricks-for-IPython-Notebook

编辑https://www.youtube.com/watch?v=Jb2HHOahvcE< - 此视频已接近我所追求的内容,我只是不太清楚如何将它们放在一起。该视频演示了spyder,这是一个带有IPython提示的IDE ...我想知道是否可以通过提示运行我的笔记本并调试它。

编辑:看起来好像PyCharm正是我所追求的:https://www.jetbrains.com/help/pycharm/2016.1/tutorial-using-ipython-jupyter-notebook-with-pycharm.html

编辑:我正在试图让PyCharm表现得好。如果我把它整理出来,我会在答案中提供详细信息。

3 个答案:

答案 0 :(得分:5)

  

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

是的,可能

使用Emacs作为第三方Python IDE。

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

自动完成工作正常。只需编写import XXX,即可让Emacs了解XXX模块中的所有函数。

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

这些是我按照屏幕截图查看的步骤。*

  1. 在Emacs上打开文件 playground.py。
  2. C-c C-p启动iPython进程并将文件连接到。请注意,iPython进程功能齐全。我可以在上面调用所有魔术方法。
  3. 在我想要的行中按M-m m d b 包含断点(以pdb导入的形式)
  4. C-M-x将定义发送至iPython提示。请注意我在调用unique_everseen时没有在提示符中键入它的屏幕截图。定义是直接从文件中发送的(这就是为什么我们有一个空单元格2,作为Emacs做的事情的视觉反馈)。
  5. 从iPython提示符执行该功能以触发断点。我得到的信息告诉我我是什么行并自动进入调试器。
  6. 检查变量以查看发生了什么。
  7. 我按n跳到下一个指令。
  8. 我点击文件名(在提示符下以红色显示),它将我的光标直接转到playground.py文件中的那一行。注意行号旁边的黑色三角形告诉我步进器所在的位置。非常好。
  9. 现在,我甚至没有看到Emacs可以提供的表面。 如果您对此感兴趣,我建议您进行调查。它非常强大,拥有一个伟大的,非常有用的和活跃的社区。

    要让所有Python配置开箱即用而无需自行配置,只需安装Spacemacs,这是一个流行的Emacs发行版(anaconda是Python,Spacemacs是Emacs)。安装说明可在链接下找到。

    使用Emacs编辑iPython笔记本。

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

    更多信息可以在项目页面here下找到,也可以在Spacemacs iPython-Notebook图层页面here下找到。

    特别是来自EIN文档:

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

      屏幕截图here.

答案 1 :(得分:4)

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

import pdb
pdb.set_trace()

代码执行将在此步骤暂停,并为您提供调试python代码的文本框。我已附上截图。

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

PDB in Jupyter Notebook

答案 2 :(得分:1)

我们刚刚发布了可能感兴趣的Jupyter笔记本的第一版Python Visual Debugger。您可以找到详细信息here (免责声明:我是首席开发人员)