pdbλ₯Ό ν΅ν΄ μ μ λλ²κ·Έν λ€μ μ μ λ€μ μ€ννκΈ° μ μ μ’ λ£νμ§ λ§μμμ€. κ·Έλ¬λ©΄ IPython νκ²½μΌλ‘ λμκ° μ μμ΅λλ€. Jupyter λ ΈνΈλΆμ pdb hangμ λν ν μ€νΈ μΌμ΄μ€λ₯Ό ν΅ν΄ μ¬ννμμμ€. λ€μμ μ€ν¬λ¦°μ·μ λλ€.
λ μ½λ λ° κ²μ μμ§μ κ²½μ° λ ΈνΈλΆμ κ±ΈκΈ°:
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 μλ΅ λ©μμ§μ λ©νλ°μ΄ν° νλλ‘ μ΄λ₯Ό μνν μ μμ΅λλ€.
λλ κ°μ λ¬Έμ μ μ§λ©΄ ν΄μλ€.
μ¬κΈ°λ λ§μ°¬κ°μ§μ λλ€. μ΄κ²μ λ΄ λͺΈμ λ€μ λ―Όκ°ν λΆλΆμμ μμ κ³ ν΅μ λλ€. μ€ν μ€μΈ μ μμ΄ 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λ₯Ό λ°μμν€λ κ²μ λλ€.
μ΄ λ¬Έμ κ° λ°μνλ λ°λ μ¬λ¬ κ°μ§ λ¬Έμ κ° μλ κ² κ°μ΅λλ€.
pdb
μλ μΉ¨ν¬λ₯Ό λ°©μ§νλ KeyboardInterrupt ν¬μ°© μ½λκ° λ§μ΄ μλ€κ³ μκ°ν©λλ€. μ΄κ²μ IPython.core.debugger.Pdb
μμ κ³ μΉ μ μμ΅λλ€.@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μ λ§μ€ν°κ° νμν©λλ€.
κ°μ₯ μ μ©ν λκΈ
μ΄κ²λ κ·Έλ₯ λ¬Όλ Έμ΅λλ€. μ¬λλ€μ μΌλ°μ μΌλ‘ jupyter λ ΈνΈλΆμμ μ΄λ»κ² λλ²κ·Έν©λκΉ? pdbλ₯Ό μ¬μ©νλ κ²μ μλ₯νμ μ κΈλ§νλ κ²κ³Ό κ°μ΅λλ€.