Ipython: μ…€μ—μ„œ pdbλ₯Ό μ‹€ν–‰ν•œ ν›„ 쀑단, 컀널/μΈν„°λŸ½νŠΈκ°€ 도움이 λ˜μ§€ μ•ŠμŒ

에 λ§Œλ“  2017λ…„ 05μ›” 08일  Β·  34μ½”λ©˜νŠΈ  Β·  좜처: ipython/ipython

pdbλ₯Ό 톡해 셀을 λ””λ²„κ·Έν•œ λ‹€μŒ 셀을 λ‹€μ‹œ μ‹€ν–‰ν•˜κΈ° 전에 μ’…λ£Œν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€. 그러면 IPython ν™˜κ²½μœΌλ‘œ λŒμ•„κ°ˆ 수 μ—†μŠ΅λ‹ˆλ‹€. Jupyter λ…ΈνŠΈλΆμ˜ pdb hang에 λŒ€ν•œ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό 톡해 μž¬ν˜„ν•˜μ‹­μ‹œμ˜€. λ‹€μŒμ€ μŠ€ν¬λ¦°μƒ·μž…λ‹ˆλ‹€.

pdb_resists_kernel_interrupt ipynb

λ ˆμ½”λ“œ 및 검색 μ—”μ§„μ˜ 경우 λ…ΈνŠΈλΆμ„ κ±ΈκΈ°:

  • λ‹€μŒ μ…€ μ‹€ν–‰
  • pdb ν”„λ‘¬ν”„νŠΈλ₯Ό 톡해 "μ’…λ£Œ"ν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€.
  • 그런 λ‹€μŒ λ‹€μ‹œ μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€.
def test():
    import pdb; pdb.set_trace()  # XXX BREAKPOINT
    return 0

test()

컀널/μΈν„°λŸ½νŠΈλŠ” 도움이 λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ…ΈνŠΈλΆμ„ μ €μž₯ν•  수 μžˆμ§€λ§Œ 셀을 λ‹€μ‹œ μ‹€ν–‰ν•˜λ €λ©΄ 컀널을 λ‹€μ‹œ μ‹œμž‘ν•΄μ•Ό ν•©λ‹ˆλ‹€. 이 μ‹œμ μ—μ„œ "λͺ¨λ“  λ³€μˆ˜κ°€ μ†μ‹€λ©λ‹ˆλ‹€"

이것은 λ‚΄κ°€ λ…ΈνŠΈλΆμ˜ λ‚˜λ¨Έμ§€ 뢀뢄을 톡해 셀을 λ””λ²„κ·Έν•˜λŠ” 방법에 λŒ€ν•œ 힌트λ₯Ό κ²€μƒ‰ν•˜κ³  셀을 λ³€κ²½ν•˜κ³  λ‹€μ‹œ μ‹€ν–‰ν•˜κΈ° 전에 μ’…λ£Œν•˜λŠ” 것을 μžŠμ—ˆμ„ λ•Œ 자주 λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 예, 더 쑰심할 수 μžˆμ§€λ§Œ λ‹€λ₯Έ μ‚¬λžŒλ“€λ„ 같은 κ²½ν—˜μ΄ μžˆμŠ΅λ‹ˆλ‹€. #3400에 μ„€λͺ…λœ νŽΈλ¦¬ν•œ ν…ŒμŠ€νŠΈ 사둀에 λŒ€ν•΄ @wmayner μ—κ²Œ κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.

Python 3.4.3(κΈ°λ³Έκ°’, 2016λ…„ 11μ›” 17일, 01:08:31)μ—μ„œ Jupyter λ…ΈνŠΈλΆ 4.3.1을 μ‹€ν–‰ μ€‘μž…λ‹ˆλ‹€. [GCC 4.8.4]
컀널 정보: Python 3.4.3(κΈ°λ³Έκ°’, 2016λ…„ 11μ›” 17일, 01:08:31)

#10499μ—μ„œ @takluyver의 μž…λ ₯

pdbλŠ” λ™μΌν•œ ν”„λ‘œμ„ΈμŠ€μ—μ„œ μ‹€ν–‰λ˜λ©° μž…λ ₯이 μ˜ˆμƒλ˜λŠ” μ‹œμ μ„ μ•Œκ³  μžˆμŠ΅λ‹ˆλ‹€. HTML μž…λ ₯ μƒμžκ°€ ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ 제거될 λ•Œ EOFErrorλ₯Ό λ°œμƒμ‹œν‚€λŠ” λ©”μ‹œμ§€κ°€ μ»€λ„λ‘œ λ‹€μ‹œ μ „μ†‘λ˜λ„λ‘ λˆ„κ΅°κ°€κ°€ μž‘μ—…μ„ μˆ˜ν–‰ν•΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.
μƒˆλ‘œμš΄ λ©”μ‹œμ§€ μœ ν˜•μ΄ ν•„μš”ν•˜κ±°λ‚˜ κΈ°μ‘΄ stdin 응닡 λ©”μ‹œμ§€μ˜ 메타데이터 ν•„λ“œλ‘œ 이λ₯Ό μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

notebook

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

이것도 κ·Έλƒ₯ λ¬Όλ ΈμŠ΅λ‹ˆλ‹€. μ‚¬λžŒλ“€μ€ 일반적으둜 jupyter λ…ΈνŠΈλΆμ—μ„œ μ–΄λ–»κ²Œ λ””λ²„κ·Έν•©λ‹ˆκΉŒ? pdbλ₯Ό μ‚¬μš©ν•˜λŠ” 것은 수λ₯˜νƒ„을 μ €κΈ€λ§ν•˜λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€.

λͺ¨λ“  34 λŒ“κΈ€

λ‚˜λŠ” 같은 λ¬Έμ œμ— 직면 ν•΄μžˆλ‹€.

여기도 λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€. 이것은 λ‚΄ λͺΈμ˜ λ‹€μ†Œ λ―Όκ°ν•œ λΆ€λΆ„μ—μ„œ μ™•μ˜ κ³ ν†΅μž…λ‹ˆλ‹€. μ‹€ν–‰ 쀑인 μ…€ 없이 pdbλ₯Ό μ€‘μ§€ν•˜λŠ” νŽΈλ¦¬ν•œ 방법이 μžˆλ‹€λ©΄ 이λ₯Ό μ™„ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜λŠ” λ…ΈνŠΈλΆμ„ μ’…λ£Œν•˜κΈ° 전에 μ΅œμ†Œν•œ μž‘μ—…μ„ μ €μž₯ν•˜λŠ” 방법이 μ€‘μš”ν•©λ‹ˆλ‹€(예: ν›ˆλ ¨λœ 신경망 및 2000 epoch 이후 μ €μž₯ μ‹œ λ…ΈνŠΈλΆ 좩돌).

Jupyter 버전 4.30, Python 3.6.2μ—μ„œλ„ 이 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 컀널을 λ‹€μ‹œ μ‹œμž‘ν•˜λŠ” 것이 이 문제λ₯Ό μ²˜λ¦¬ν•˜λŠ” μœ μΌν•œ 방법인 것 κ°™μŠ΅λ‹ˆλ‹€.

이것 λ•Œλ¬Έμ— 8μ‹œκ°„ 계산을 λ†“μ³€μŠ΅λ‹ˆλ‹€...λ‹€μ‹œ μ‹œμž‘ν•΄μ•Ό ν•©λ‹ˆλ‹€.

였늘 κ²°κ³Όλ₯Ό λ°œν‘œν•  64μ‹œκ°„ 계산을 λ†“μ³€μŠ΅λ‹ˆλ‹€. -.-

아무도 해결책을 찾지 λͺ»ν–ˆμŠ΅λ‹ˆκΉŒ?

이것도 κ·Έλƒ₯ λ¬Όλ ΈμŠ΅λ‹ˆλ‹€. μ‚¬λžŒλ“€μ€ 일반적으둜 jupyter λ…ΈνŠΈλΆμ—μ„œ μ–΄λ–»κ²Œ λ””λ²„κ·Έν•©λ‹ˆκΉŒ? pdbλ₯Ό μ‚¬μš©ν•˜λŠ” 것은 수λ₯˜νƒ„을 μ €κΈ€λ§ν•˜λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€.

제발 κ³ μ³μ£Όμ„Έμš”! λ‚˜λŠ” μ§€μ†μ μœΌλ‘œμ΄ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€.

여기도 λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€. 맀우 κΈ΄ 계산을 λ‹€μ‹œ ν•΄μ•Ό 함

여기도 λ§ˆμ°¬κ°€μ§€.

λˆ„κ΅°κ°€ κ³ μ³μ£Όμ„Έμš”. 그러면 $5λ₯Ό μ§€λΆˆν•˜κ² μŠ΅λ‹ˆλ‹€.

@zsal 진지 ν•˜λ‹€λ©΄ https://www.bountysource.com에 문제λ₯Ό μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 더 이상 μž…λ ₯ ν”„λ‘¬ν”„νŠΈμ— 도달할 수 없더라도 ν­μ£Όν•˜λŠ” ν”„λ‘œμ„ΈμŠ€ λ˜λŠ” μž…λ ₯을 "λŒ€κΈ°"ν•˜κ³  μ œμ–΄κΆŒμ„ λ˜μ°ΎλŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό μ€‘λ‹¨ν•˜λŠ” 방법이 ν•„μš”ν•©λ‹ˆλ‹€.

λ‚˜λŠ” μ΄ˆλ³΄μžμž…λ‹ˆλ‹€. κ³ κΈ‰ ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” λ…ΈνŠΈλΆμ—μ„œ μ–΄λ–»κ²Œ λ””λ²„κΉ…ν•©λ‹ˆκΉŒ? ν™•μ‹€νžˆ 그듀은이 "μ‹œν•œ 폭탄"κ³Ό ν•¨κ»˜ PDBλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ? 비밀을 κ³΅μœ ν•΄μ£Όμ„Έμš”! :)

+1

+1

+1

+1

μœ„λ‘œ!
이 λ¬Έμ œλŠ” pdbλ₯Ό μ‚¬μš©ν•˜κ³  셀을 λ‹€μ‹œ μ‹€ν–‰ν•˜κΈ° 전에 μ’…λ£Œν•˜λŠ” 것을 μžŠμ—ˆμ„ λ•Œλ§ˆλ‹€ μˆ˜λ…„ λ™μ•ˆ μ €μ—κ²Œ κ³ ν†΅μ΄μ—ˆμŠ΅λ‹ˆλ‹€.

μ €λŠ” BountySourceμ—μ„œ ν˜„μƒκΈˆμ„ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. μš°λ¦¬κ°€ μΆ©λΆ„ν•œ λˆμ„ λͺ¨μ„ 수 μžˆλ‹€λ©΄ μ•„λ§ˆλ„ 이것은 λ§ˆμΉ¨λ‚΄ κ³ μΉ  κ²ƒμž…λ‹ˆλ‹€.
https://www.bountysource.com/issues/44958889-hang-after-running-pdb-in-a-cell-kernel-interrupt-doesn-t-help

+1

+1

이것은 λͺ‡ λ…„ λ™μ•ˆ λ‚˜λ₯Ό 미치게 λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.

λŒ€μ‹  IPython.core.debugger.Pdb μ‚¬μš©ν•˜λŠ” 것은 μ–΄λ–»μŠ΅λ‹ˆκΉŒ?

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

(λ˜λŠ” %debug 맀직 을 디버깅에 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.)

Pdb().set_trace() 두 번 싀행해도 λ™μΌν•œ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€.

λ‚˜λŠ” 이것을 μ‘°μ‚¬ν•˜κ³  μžˆλ‹€. μΈν„°λŸ½νŠΈκ°€ μž‘λ™ν•˜λŠ” κΈ°λ³Έ 방법은 (Unixμ—μ„œ) ν”„λ‘œμ„ΈμŠ€μ— μ‹ ν˜Έλ₯Ό λ³΄λ‚΄μ„œ KeyboardInterruptλ₯Ό λ°œμƒμ‹œν‚€λŠ” κ²ƒμž…λ‹ˆλ‹€.

이 λ¬Έμ œκ°€ λ°œμƒν•˜λŠ” λ°λŠ” μ—¬λŸ¬ 가지 λ¬Έμ œκ°€ μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

  1. SIGINTλŠ” zeromqλ₯Ό μ€‘λ‹¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이것은 https://github.com/zeromq/pyzmq/pull/1368에 μ˜ν•΄ μˆ˜μ •λ˜κΈ°λ₯Ό
  2. zeromqκ°€ μΈν„°λŸ½νŠΈκ°€ κ°€λŠ₯ν•˜λ”λΌλ„ pdb μ—λŠ” 침투λ₯Ό λ°©μ§€ν•˜λŠ” KeyboardInterrupt 포착 μ½”λ“œκ°€ 많이 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 이것은 IPython.core.debugger.Pdb μ—μ„œ κ³ μΉ  수 μžˆμŠ΅λ‹ˆλ‹€.
  1. μ •ν™•ν•˜μ§€ μ•Šμ€ 경우, zeromqλŠ” SIGINT에 μ˜ν•΄ μ€‘λ‹¨λ˜κ³  μ΅œμ†Œν•œ SIGINT ν•Έλ“€λŸ¬ μžμ²΄κ°€ μž¬μ •μ˜λ˜μ§€ μ•ŠλŠ” ν•œ KeyboardInterruptλ₯Ό λ°œμƒμ‹œν‚΅λ‹ˆλ‹€.

@minrk κ°€

이 μˆ˜μ • 사항을 μ μš©ν•˜λ €λ©΄ λ‹€μŒμ΄ μˆ˜ν–‰λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

μ°Ύμ•„μ£Όμ…”μ„œ 정말 κ°μ‚¬ν•©λ‹ˆλ‹€!!

μƒˆλ‘œμš΄ IPykernel λ¦΄λ¦¬μŠ€κ°€ λ‚˜μ˜€μž 마자 이것은 μˆ˜μ •λœ λŒ€λ‘œ μ’…λ£Œλ  수 μžˆμŠ΅λ‹ˆλ‹€.

μ™„λ£Œ! 닫을 수 μžˆμŠ΅λ‹ˆλ‹€.

import IPython
import ipykernel
print(IPython.__version__)
print(ipykernel.__version__)
IPython.core.debugger.set_trace()

7.15.0
5.3.0

``` 250 sys.stdout.flush()
251
--> 252 def __call__(μžμ‹ , κ²°κ³Ό=μ—†μŒ):
253 """기둝 μΊμ‹œ κ΄€λ¦¬λ‘œ 인쇄 μ€‘μž…λ‹ˆλ‹€.
254

--ν‚€λ³΄λ“œ μΈν„°λŸ½νŠΈ--
--ν‚€λ³΄λ“œ μΈν„°λŸ½νŠΈ--
```

λ‚΄ κ²½μš°μ—λŠ” KeyboardInterruptκ°€ 아무 일도 ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. μ˜ˆμƒλ˜λŠ” ν–‰λ™μž…λ‹ˆκΉŒ?

λ°©ν•΄κ°€ 될 κ²ƒμœΌλ‘œ μ˜ˆμƒλ©λ‹ˆλ‹€. μž¬ν˜„ν•  수 μžˆλŠ”μ§€ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. 이것은 Windows, 예?

λ§₯OS 10.15.5

Python 3.6.2 (default, May  4 2018, 19:40:30)
[GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.1)] on darwin

μ•„, μ˜ˆμƒν•˜μ§€ λͺ»ν•œ μΌμž…λ‹ˆλ‹€. λͺ…ν™•νžˆ ν•˜κΈ° μœ„ν•΄ μΆ”κ°€ν•  수 μžˆλŠ” 정보가 있으면 μ•Œλ €μ£Όμ‹­μ‹œμ˜€.

핍 λͺ©λ‘
```νŒ¨ν‚€μ§€ 버전


μ•±λ…Έν”„ 0.1.0
속성 19.3.0
백콜 0.2.0
ν‘œλ°±μ œ 3.1.5
λ°μ½”λ ˆμ΄ν„° 4.4.2
defusedxml 0.6.0
μ§„μž…μ  0.3
아이피컀널 5.3.0
μ•„μ΄νŒŒμ΄μ¬ 7.15.0
ipython-genutils 0.2.0
μ•„μ΄ν”Όμœ„μ ― 7.5.1
μ œλ‹€μ΄ 0.17.1
μ§„μž2 2.11.2
jsonμŠ€ν‚€λ§ˆ 3.2.0
μ£Όν”Όν„° 1.0.0
μ£Όν”Όν„° ν΄λΌμ΄μ–ΈνŠΈ 6.1.3
μ£Όν”Όν„° μ½˜μ†” 6.1.0
μ£Όν”Όν„° μ½”μ–΄ 4.6.3
λ§ˆν¬μ—…μ„Έμ΄ν”„ 1.1.1
λΆˆν–‰ 0.8.4
nbconvert 5.6.1
엔비포맷 5.0.7
λ…ΈνŠΈλΆ 6.0.3
포μž₯ 20.4
νŒλ… ν•„ν„° 1.4.2
νŒŒμ†Œ 0.7.0
κΈ°λŒ€ 4.8.0
피클쉐어 0.7.5
핍 20.0.2
ν”„λ‘œλ©”ν…Œμš°μŠ€ ν΄λΌμ΄μ–ΈνŠΈ 0.8.0
ν”„λ‘¬ν”„νŠΈ νˆ΄ν‚· 3.0.5
ν”Όν‹°ν”„λ‘œμ„ΈμŠ€ 0.6.0
μ•ˆλ£Œ 2.6.1
νŒŒμ΄νŒŒμ‹± 2.4.7
μ—΄λ ¬ν•œ 0.16.0
파이썬-dateutil 2.8.1
pyzmq 19.0.1
νν‹°μ½˜μ†” 4.7.5
νν‹°νŒŒμ΄ 1.9.0
Send2Trash 1.5.0
μ„€μ • 도ꡬ 46.0.0
μ—¬μ„― 1.15.0
터미널 0.8.3
ν…ŒμŠ€νŠΈ 경둜 0.4.4
토넀이도 6.0.4
ν˜•μ§ˆ 4.3.3
ν™”μž₯μ‹€ 폭 0.2.5
μ›Ή 인코딩 0.5.1
휠 0.34.2
μœ„μ ―nbextension 3.5.1```

λ‚˜λ₯Ό μœ„ν•΄ μ—…λ°μ΄νŠΈ 후에도 λ¬Έμ œκ°€ μ§€μ†λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ μž‘μ—…μ— μ‚¬μš©ν•˜λŠ” 원격 Linux μ»΄ν“¨νŒ… λ…Έλ“œμ—μ„œ λ‹€μŒμ„ μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

import IPython
import ipykernel
import os
import platform

print(IPython.__version__)
print(ipykernel.__version__)
print(os.name,platform.system(),platform.release())
IPython.core.debugger.set_trace()

7.15.0
5.3.0
ν¬μ‹μŠ€ λ¦¬λˆ…μŠ€ 4.19.94-300.el7.x86_64

ν˜„μž¬ κ½€ λΆ€ν”Όκ°€ 큰 ν™˜κ²½μ—μ„œ μž‘μ—… μ€‘μ΄λ―€λ‘œ 일뢀 쒅속성이 원인일 수 μžˆμŒμ„ λ°°μ œν•  수 μ—†μŠ΅λ‹ˆκΉŒ? λ‚˜λŠ” 그것이 μœ μš©ν•˜λ‹€λ©΄ μ΅œμ†Œν•œμ˜ ν™˜κ²½μ—μ„œλ„ 였λ₯˜κ°€ μž¬ν˜„λ˜λŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆκΉŒ?

아직 μΆœμ‹œλ˜μ§€ μ•Šμ€ IPykernel의 λ§ˆμŠ€ν„°κ°€ ν•„μš”ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰