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

P i*_*P i 10 python debugging ipython spyder jupyter-notebook

我的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表现得好.如果我把它整理出来,我会在答案中提供详细信息.

dan*_*gom 5

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

是的,这是可能的.

使用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文件中的那一行.注意行号旁边的黑色三角形告诉我步进器所在的位置.非常好.

现在,我甚至没有触及 Emacs可以提供的表面.如果您对此感兴趣,我建议您进行调查.它非常强大,拥有一个伟大的,非常有用的和活跃的社区.

为了让所有Python配置无需自己配置任何东西就可以开箱即用,只需安装Spacemacs,一个流行的Emacs发行版(anaconda是Python,Spacemacs是Emacs).安装说明可在链接下找到.

使用Emacs编辑iPython笔记本.

一个名为EIN(Emacs iPython Notebooks)的软件包"在Emacs中提供了一个IPython Notebook客户端和集成的REPL." 要使其工作,您可以从任何终端打开iPython笔记本电脑服务器ipython notebook,并调用该功能ein:notebooklist.

更多信息可以在这里的项目页面下找到,也可以在Spacemacs iPython-Notebook层页面上找到.

特别是,从EIN文档:

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

上面描述的简单iPython +文件工作流程的所有功能都可用于iPython笔记本(*.ipynb).

屏幕截图在这里.


小智 5

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

import pdb
pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)

代码执行将在此步骤暂停,并为您提供用于调试 Python 代码的文本框。我附上了相同的截图。

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

Jupyter Notebook 中的 PDB

  • 这不是一个很好的答案,因为如果您想调试笔记本从另一个文件调用的代码,您必须访问并编辑该代码。最好有可以在 Jupyter 中使用的 `b library.py:22` 等价物,而无需编辑 `library.py`。 (2认同)

小智 5

我们刚刚发布了适用于 Jupyter Notebooks 的 Python 可视化调试器的第一个版本,您可能会感兴趣。您可以在这里找到详细信息。
(免责声明:我是首席开发人员)