是否有可能进入从代码的IPython?(Is it possible to go into ipyt

2019-06-25 22:18发布

对于我调试的需要, pdb是相当不错的。 然而,这将是冷却器(和有益的),如果我能进入ipython 。 这事可能吗?

Answer 1:

有一个ipdb中嵌入的IPython到标准的pdb项目,所以你可以这样做:

import ipdb; ipdb.set_trace()

通过通常这是安装pip install ipdb

ipdb很短,所以不是easy_installing你也可以创建一个文件ipdb.py某处你的Python路径上和以下内容粘贴到文件中:

import sys
from IPython.Debugger import Pdb
from IPython.Shell import IPShell
from IPython import ipapi

shell = IPShell(argv=[''])

def set_trace():
    ip = ipapi.get()
    def_colors = ip.options.colors
    Pdb(def_colors).set_trace(sys._getframe().f_back)


Answer 2:

在IPython的0.11,你可以直接在你的代码是这样的IPython嵌入

你的程序可能是这样的

In [5]: cat > tmpf.py
a = 1

from IPython import embed
embed() # drop into an IPython session.
        # Any variables you define or modify here
        # will not affect program execution

c = 2

^D

这是当你运行它(我随意选择运行现有的IPython会话内。这样在我的经验嵌套IPython的会话可以导致崩溃)会发生什么。

In [6]:

In [6]: run tmpf.py
Python 2.7.2 (default, Aug 25 2011, 00:06:33)
Type "copyright", "credits" or "license" for more information.

IPython 0.11 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: who
a       embed

In [2]: a
Out[2]: 1

In [3]:
Do you really want to exit ([y]/n)? y


In [7]: who
a       c       embed


Answer 3:

相当于

import pdb; pdb.set_trace()

与IPython的是一样的东西:

from IPython.ipapi import make_session; make_session()
from IPython.Debugger import Pdb; Pdb().set_trace()

这是一个有点冗长,但良好的知道,如果你没有安装IPDB。 该make_session调用需要一次设置的配色方案等,并set_trace电话可以放在任何地方,你需要打破。



Answer 4:

如果您使用的是更现代版的IPython的(> 0.10.2),您可以使用类似

from IPython.core.debugger import Pdb
Pdb().set_trace()

但是,它可能会更好只使用IPDB



Answer 5:

通常情况下,当我使用IPython中,我打开与它里面的“PDB”命令自动调试。

然后,我在我的脚本所在的目录下的“运行myscript.py”命令来运行我的脚本。

如果我得到一个异常,IPython中停止调试器内的程序。 退房help命令对魔IPython的命令(%魔法)



Answer 6:

我喜欢简单,就是一个班轮粘贴到我的剧本,我想设置一个断点:

__import__('IPython').Debugger.Pdb(color_scheme='Linux').set_trace()

较新的版本可以使用:

__import__('IPython').core.debugger.Pdb(color_scheme='Linux').set_trace()


Answer 7:

貌似模块已经围绕最近有点洗牌。 在IPython的0.13.1以下工作对我来说

from IPython.core.debugger import Tracer; breakpoint = Tracer()

breakpoint() # <= wherever you want to set the breakpoint

虽然唉,这一切都非常的qtconsole一文不值 。



Answer 8:

IPython的较新版本的嵌入和嵌套的IPython会话到任何Python程序提供了一个简单的机制。 你可以按照下面的食谱嵌入IPython的会议:

try:
    get_ipython
except NameError:
    banner=exit_msg=''
else:
    banner = '*** Nested interpreter ***'
    exit_msg = '*** Back in main IPython ***'

# First import the embed function
from IPython.frontend.terminal.embed import InteractiveShellEmbed
# Now create the IPython shell instance. Put ipshell() anywhere in your code
# where you want it to open.
ipshell = InteractiveShellEmbed(banner1=banner, exit_msg=exit_msg)

然后使用ipshell()只要你想放到一个IPython的外壳。 这将允许你嵌入(甚至鸟巢)IPython的译员在你的代码。



Answer 9:

从IPython的文档 :

import IPython.ipapi
namespace = dict(
    kissa = 15,
    koira = 16)
IPython.ipapi.launch_new_instance(namespace)

将编程推出一个IPython的壳。 显然,在值namespace字典都只是虚值-它可能会更有意义用locals()在实践中。

请注意,你必须在这个硬编码; 它不会在上班的路上pdb一样。 如果这是你想要的,DoxaLogos的回答可能更喜欢你在找什么。



Answer 10:

快速和简单的方法:

from IPython.Debugger import Tracer
debug = Tracer()

然后就写

debug()

无论你想开始调试程序。



Answer 11:

我不得不谷歌这样一对夫妇,如果时间过去的几天里因此增加一个答案......有时真的很高兴能够运行一个脚本通常只有拖放到IPython中/ IPDB上的错误,而不必把ipdb.set_trace()断点到代码

ipython --pdb -c "%run path/to/my/script.py --with-args here"

(第一pip install ipythonpip install ipdb当然)



Answer 12:

这是非常简单的:

ipython some_script.py --pdb

它需要IPython的安装,通常这个工程: pip install ipython

我用ipython3代替IPython中,所以我知道这是一个最近的Python版本。

这是简单的记住,因为你只需使用IPython的,而不是蟒蛇,并添加--pdb到底。



文章来源: Is it possible to go into ipython from code?