如何从 Jupyter/IPython notebook 调试外部 .py 函数 运行
How to debug external .py functions run from Jupyter/IPython notebook
我的 Jupyter/IPython 笔记本在外部 .py 中执行函数。
我需要在这些函数中设置断点、检查变量、单步执行等
结合使用 print
语句和抛出异常来提前退出单元格是不切实际的。
我需要某种工作流程。
是否可以连接一些第三方 editor/IDE 来查看 .py 并以某种方式将其连接到 Python 运行time Jupyter/IPython 正在使用?
因此,如果我使用我的 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 表现得很好。如果我整理出来,我会在答案中提供详细信息。
Is it possible to hook up some third-party editor/IDE to view the .py
and somehow connect it to the Python runtime Jupyter/IPython is using?
是的,有可能。
使用 Emacs 作为您的第三方 Python IDE.
您可以使用 iPython 运行时并排打开文件。可以使用快捷键将外部文件的定义直接发送到提示符,并使用标准 [=] 从 iPython 提示符 设置断点、单步执行和检查变量 123=] 调试器 pdb.
自动完成工作正常。只需编写 import XXX
即可让 Emacs 识别 XXX
模块中的所有函数。
这是一个示例屏幕截图:
这些是我获取屏幕截图所遵循的步骤。*
- 在 Emacs 上打开文件 playground.py。
- 按
C-c C-p
以 启动一个 iPython 进程并将文件连接到它 。请注意,iPython 进程功能齐全。我可以在上面调用所有魔术方法。
- 按
M-m m d b
在我想要的行中包含断点(以 pdb 导入的形式)
- 按
C-M-x
以 将定义发送到 iPython 提示。请注意,在屏幕截图中,我在调用 unique_everseen
时从未在提示中键入它。定义是直接从文件发送的(这就是为什么我们有一个空单元格 2,作为 Emacs 做了某事的视觉反馈)。
- 从iPython提示执行函数触发断点。我得到信息告诉我我在哪一行并自动进入调试器。
- 我检查变量看看发生了什么。
- 我按
n
以 进入下一个 指令。
- 我单击文件名(在提示中显示为红色),它会将我的光标直接带到 playground.py 文件中的那一行。请注意行号旁边的黑色三角形告诉我步进器的位置。非常好。
现在,我什至还没有触及 Emacs 可以提供的功能的皮毛。
如果您对此感兴趣,我建议您进行调查。它真的很强大,并且有一个非常有用和活跃的社区。
要开箱即用所有 Python 配置 运行 而无需自己配置任何东西,只需安装 Spacemacs,一个流行的 Emacs 发行版(anaconda 对 Python,Spacemacs 就是 Emacs)。安装说明可在 link 下找到。
使用 Emacs 编辑 iPython 笔记本。
一个名为 EIN 的包(Emacs iPython 笔记本)"provides a IPython Notebook client and integrated REPL in Emacs."
为了让它工作,你从任何终端用 ipython notebook
打开你的 iPython 笔记本服务器,然后调用函数 ein:notebooklist
.
可以在项目页面 here, and on the Spacemacs iPython-Notebook layer page here 下找到更多信息。
特别是,来自 EIN 文档:
- Copy/paste 个单元格,甚至 to/from 个不同的笔记本。
- 控制台集成:您可以通过控制台应用程序轻松连接到内核。这使您能够在同一个内核中开始调试。甚至可以通过 ssh 连接到控制台。
- IPython 内核可以"connected" 到任何 Emacs 缓冲区。这使您能够使用与笔记本相同的内核来评估缓冲区或缓冲区。这些缓冲区中提供了诸如工具提示帮助、帮助浏览器和代码完成之类的笔记本好东西。
- 跳转到定义(通过在对象上按 M-. 转到定义)。
上面描述的简单 iPython + 文件工作流程的所有功能都适用于 iPython 笔记本 (*.ipynb)。
截图here.
在 Jupyter 中,您可以通过添加以下两行作为断点来使用 python 调试器。
import pdb
pdb.set_trace()
代码执行将在此步骤暂停,并会为您提供用于调试 python 代码的文本框。我已附上相同的屏幕截图。
您可以参考 pdb documentation 了解除了打印变量之外您可以执行的操作
我们刚刚发布了第一个版本的 Python 用于 Jupyter 笔记本的可视化调试器,您可能会感兴趣。您可以找到详细信息 here.
(免责声明:我是首席开发人员)
我的 Jupyter/IPython 笔记本在外部 .py 中执行函数。
我需要在这些函数中设置断点、检查变量、单步执行等
结合使用 print
语句和抛出异常来提前退出单元格是不切实际的。
我需要某种工作流程。
是否可以连接一些第三方 editor/IDE 来查看 .py 并以某种方式将其连接到 Python 运行time Jupyter/IPython 正在使用?
因此,如果我使用我的 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 表现得很好。如果我整理出来,我会在答案中提供详细信息。
Is it possible to hook up some third-party editor/IDE to view the .py and somehow connect it to the Python runtime Jupyter/IPython is using?
是的,有可能。
使用 Emacs 作为您的第三方 Python IDE.
您可以使用 iPython 运行时并排打开文件。可以使用快捷键将外部文件的定义直接发送到提示符,并使用标准 [=] 从 iPython 提示符 设置断点、单步执行和检查变量 123=] 调试器 pdb.
自动完成工作正常。只需编写 import XXX
即可让 Emacs 识别 XXX
模块中的所有函数。
这是一个示例屏幕截图:
这些是我获取屏幕截图所遵循的步骤。*
- 在 Emacs 上打开文件 playground.py。
- 按
C-c C-p
以 启动一个 iPython 进程并将文件连接到它 。请注意,iPython 进程功能齐全。我可以在上面调用所有魔术方法。 - 按
M-m m d b
在我想要的行中包含断点(以 pdb 导入的形式) - 按
C-M-x
以 将定义发送到 iPython 提示。请注意,在屏幕截图中,我在调用unique_everseen
时从未在提示中键入它。定义是直接从文件发送的(这就是为什么我们有一个空单元格 2,作为 Emacs 做了某事的视觉反馈)。 - 从iPython提示执行函数触发断点。我得到信息告诉我我在哪一行并自动进入调试器。
- 我检查变量看看发生了什么。
- 我按
n
以 进入下一个 指令。 - 我单击文件名(在提示中显示为红色),它会将我的光标直接带到 playground.py 文件中的那一行。请注意行号旁边的黑色三角形告诉我步进器的位置。非常好。
现在,我什至还没有触及 Emacs 可以提供的功能的皮毛。 如果您对此感兴趣,我建议您进行调查。它真的很强大,并且有一个非常有用和活跃的社区。
要开箱即用所有 Python 配置 运行 而无需自己配置任何东西,只需安装 Spacemacs,一个流行的 Emacs 发行版(anaconda 对 Python,Spacemacs 就是 Emacs)。安装说明可在 link 下找到。
使用 Emacs 编辑 iPython 笔记本。
一个名为 EIN 的包(Emacs iPython 笔记本)"provides a IPython Notebook client and integrated REPL in Emacs."
为了让它工作,你从任何终端用 ipython notebook
打开你的 iPython 笔记本服务器,然后调用函数 ein:notebooklist
.
可以在项目页面 here, and on the Spacemacs iPython-Notebook layer page here 下找到更多信息。
特别是,来自 EIN 文档:
- Copy/paste 个单元格,甚至 to/from 个不同的笔记本。
- 控制台集成:您可以通过控制台应用程序轻松连接到内核。这使您能够在同一个内核中开始调试。甚至可以通过 ssh 连接到控制台。
- IPython 内核可以"connected" 到任何 Emacs 缓冲区。这使您能够使用与笔记本相同的内核来评估缓冲区或缓冲区。这些缓冲区中提供了诸如工具提示帮助、帮助浏览器和代码完成之类的笔记本好东西。
- 跳转到定义(通过在对象上按 M-. 转到定义)。
上面描述的简单 iPython + 文件工作流程的所有功能都适用于 iPython 笔记本 (*.ipynb)。
截图here.
在 Jupyter 中,您可以通过添加以下两行作为断点来使用 python 调试器。
import pdb
pdb.set_trace()
代码执行将在此步骤暂停,并会为您提供用于调试 python 代码的文本框。我已附上相同的屏幕截图。
您可以参考 pdb documentation 了解除了打印变量之外您可以执行的操作
我们刚刚发布了第一个版本的 Python 用于 Jupyter 笔记本的可视化调试器,您可能会感兴趣。您可以找到详细信息 here.
(免责声明:我是首席开发人员)