내 디버깅 요구에 pdb
대해서는 꽤 좋습니다. 그러나 내가 들어갈 수 있다면 훨씬 더 시원하고 도움이 될 것 ipython
입니다. 이것이 가능합니까?
답변:
ipdb
iPython을 표준 pdb에 포함 하는 프로젝트가 있으므로 다음과 같이 할 수 있습니다.
import ipdb; ipdb.set_trace()
일반적인 .NET을 통해 설치할 수 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)
ModuleNotFoundError: No module named 'IPython.Debugger'
, ModuleNotFoundError: No module named 'IPython.Shell'
과ImportError: cannot import name 'ipapi'
ModuleNotFoundError: No module named 'IPython.Debugger'
, ModuleNotFoundError: No module named 'IPython.Shell'
그리고ImportError: cannot import name 'ipapi'
breakpoint()
ipdb에 들어가는 함수를 얻는 방법이 있습니다 .
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
def f() : pass ; IPython.embed = f
너무 것을 embed()
호출이 무 조작 다음 Ctrl + D입니다
최근에 모듈이 뒤섞인 것 같습니다. IPython 0.13.1에서 다음은 나를 위해 작동합니다.
from IPython.core.debugger import Tracer; breakpoint = Tracer()
breakpoint() # <= wherever you want to set the breakpoint
아아, qtconsole에서는 모두 쓸모가 없습니다 .
최신 버전의 IPython은 모든 Python 프로그램에 IPython 세션을 포함하고 중첩 할 수있는 쉬운 메커니즘을 제공합니다. 다음 레시피 에 따라 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 인터프리터를 포함 (및 중첩) 할 수 있습니다.
로부터 IPython 워드 프로세서 :
import IPython.ipapi
namespace = dict(
kissa = 15,
koira = 16)
IPython.ipapi.launch_new_instance(namespace)
프로그래밍 방식으로 IPython 셸을 시작합니다. 분명히 namespace
dict 의 값은 더미 값일뿐 locals()
입니다. 실제로 사용하는 것이 더 합리적 일 수 있습니다 .
이것을 하드 코딩해야합니다. 그 방식대로 작동하지 않을 것 pdb
입니다. 그것이 당신이 원하는 것이라면 DoxaLogos의 대답은 아마도 당신이 찾고있는 것과 더 비슷할 것입니다.
빠르고 쉬운 방법 :
from IPython.Debugger import Tracer
debug = Tracer()
그럼 그냥 쓰세요
debug()
프로그램 디버깅을 시작할 때마다.
ImportError: No module named 'IPython.Debugger'
파이썬 3.4 / IPython 3
나는 지난 며칠 동안 이것을 몇 번 google해야 했으므로 답변을 추가했습니다 ... 때로는 스크립트를 정상적으로 실행 ipdb.set_trace()
하고 코드 에 중단 점 을 넣지 않고도 오류가 발생하면 ipython / ipdb에 드롭하는 것이 좋습니다.
ipython --pdb -c "%run path/to/my/script.py --with-args here"
(제 1 pip install ipython
및 pip install ipdb
코스)
ipython --pdb -- ./path/to/my/script --with-args here
터미널 색상을 사용하여 IPython의 REPL을 얻으려면 다음을 수행해야합니다.
from IPython import start_ipython
start_ipython()
https://ipython.readthedocs.io/en/stable/api/generated/IPython.html#IPython.start_ipython