[python] 코드에서 ipython으로 이동할 수 있습니까?

내 디버깅 요구에 pdb대해서는 꽤 좋습니다. 그러나 내가 들어갈 수 있다면 훨씬 더 시원하고 도움이 될 것 ipython입니다. 이것이 가능합니까?



답변

ipdbiPython을 표준 pdb에 포함 하는 프로젝트가 있으므로 다음과 같이 할 수 있습니다.

import ipdb; ipdb.set_trace()

일반적인 .NET을 통해 설치할 수 pip install ipdb있습니다.

ipdb매우 짧기 때문에 easy_installing 대신 ipdb.pyPython 경로에 파일을 만들고 다음을 파일에 붙여 넣을 수도 있습니다.

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)


답변

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


답변

최신 버전의 IPython (> 0.10.2)을 사용하는 경우 다음과 같이 사용할 수 있습니다.

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

하지만 ipdb를 사용하는 것이 더 낫습니다.


답변

동등한

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호출 배치 할 수 있습니다 어디서나 당신은 휴식해야합니다.


답변

일반적으로 ipython을 사용할 때 내부에 “pdb”명령을 사용하여 자동 디버깅을 설정합니다.

그런 다음 스크립트가있는 디렉토리에서 “run myscript.py”명령을 사용하여 스크립트를 실행합니다.

예외가 발생하면 ipython은 디버거 내에서 프로그램을 중지합니다. 매직 ipython 명령 (% magic)에 대한 도움말 명령을 확인하십시오.


답변

중단 점을 설정하려는 스크립트에이 한 줄을 간단히 붙여넣고 싶습니다.

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

최신 버전은 다음을 사용할 수 있습니다.

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


답변

최근에 모듈이 뒤섞인 것 같습니다. IPython 0.13.1에서 다음은 나를 위해 작동합니다.

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

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

아아, qtconsole에서는 모두 쓸모가 없습니다 .