Ipython: ๋‹ค์‹œ ์ฝ๊ธฐ ๋ผ์ธ ๊ธฐ๋Šฅ์„ ๊ฐ€์ ธ์˜ค์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2017๋…„ 03์›” 01์ผ  ยท  38์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ipython/ipython

๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์ง€๋Š” ์•Š์ง€๋งŒ, ๋‚˜๋Š” ํ”„๋กฌํ”„ํŠธ_ํˆดํ‚ท ๊ธฐ๋ฐ˜ ์ž…๋ ฅ์ด ์‚ฌ๋žŒ๋“ค์˜ ์›Œํฌํ”Œ๋กœ๋ฅผ ๊นจ๋œจ๋ฆฌ๋Š” ๊ณ ํ†ต์„ ๊ฒช๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ถฉ๋ถ„ํžˆ ๊ฒฝํ—˜ํ•˜๊ณ  ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ์ง„์ง€ํ•˜๊ฒŒ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์•„์˜ˆ ์—†์• ๊ณ  ๊ธฐ๋ณธ๊ฐ’์„ ๋™์‹œ์— ๋ฐ”๊พผ๊ฑด ์‹ค์ˆ˜๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

  • ์ด์— ๋Œ€ํ•œ Sage ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•œ ์ตœ๊ทผ ํ† ๋ก 
  • #9816์—๋Š” ํŒŒ์†์„ ๋ณด๊ณ ํ•˜๋Š” ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ #9388์˜ readline๊ณผ ๋น„๊ตํ•˜์—ฌ ํšŒ๊ท€๊ฐ€ ์žˆ๋Š” ํ”„๋กฌํ”„ํŠธ ํˆดํ‚ท์„ ๋ถˆ๋Ÿฌ์™”์Šต๋‹ˆ๋‹ค.
  • ์œ ์‚ฌํ•˜๊ฒŒ #10075์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‚ฌ์šฉ์ž์˜ ๊ฐ์ •์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. "๋‹ค์ค‘ ์ค„ ํŽธ์ง‘์€ ๋งค์šฐ ์ข‹์€ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์˜ค๋žœ vim ๋ฐ bash ์‚ฌ์šฉ์ž๋กœ์„œ IPython 5.x ๋ฐ prompt_toolkit์œผ๋กœ์˜ ์ „ํ™˜์ด ๋ถˆํŽธํ–ˆ์Šต๋‹ˆ๋‹ค."
  • #10085๋Š” ์—…์ŠคํŠธ๋ฆผ์—์„œ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์„ prompt_toolkit์˜ ์ œํ•œ ๋ฐ ๋ถˆ์ผ์น˜๋ฅผ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.
  • #9944๋Š” ์ด์ „ readline ๊ธฐ๋ฐ˜ ์ฝ”๋“œ์—์„œ ์ž‘๋™ํ•˜๋˜ ํ”„๋กฌํ”„ํŠธ ํˆดํ‚ท ์ „ํ™˜๊ณผ ๊ด€๋ จ๋œ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. (Thomas๊ฐ€ ์ตœ๊ทผ #10185์—์„œ ์ด์— ๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ œ์•ˆํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜์ง€๋งŒ, ๊ทธ ํ•œ๊ณ„์— ๋Œ€ํ•œ ๋…ผ์˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„).
  • #10211์€ ๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ ํ”„๋กฌํ”„ํŠธ ํˆดํ‚ท์œผ๋กœ์˜ ์ „ํ™˜์— ๊ธฐ์ธํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ์˜ํ–ฅ์„ ๋ฐ›์€ emacs ์‚ฌ์šฉ์ž์ž…๋‹ˆ๋‹ค.
  • #10315๋Š” IPython 5์—์„œ ๋˜ ๋‹ค๋ฅธ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์†์ƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด prompt_toolkit์€ ์™„๋ฃŒ๋ฅผ ์œ„ํ•ด ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(๋ฐ˜๋ฉด ์™„๋ฃŒ๋Š” readline์—์„œ ๋™๊ธฐ์‹์ด์–ด์•ผ ํ•˜๋ฏ€๋กœ jpype ์™„๋ฃŒ๋Š” IPython <= 4์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค).
  • #9948 - ์‚ฌ์šฉ์ž๊ฐ€ tmux๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์ค„์„ ๋ถ™์—ฌ๋„ฃ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • #10071 - ๋„์ปค ๋‚ด๋ถ€์˜ IPython 5๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•œ ํ›„ ๋ฌด์ž‘์œ„๋กœ ๋ˆ„๋ฝ๋œ ํ”„๋กฌํ”„ํŠธ(ํ„ฐ๋ฏธ๋„ ํฌ๊ธฐ๊ฐ€ 0x0์œผ๋กœ ๋ณด๊ณ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—)
needs-decision

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์•„์ง ๊ตฌ๋… ์ค‘์ธ ์‚ฌ๋žŒ์„ ์œ„ํ•ด: ๋ฐฉ๊ธˆ rlipython ๋ฒ„์ „ 0.1.0์„ ์ถœ์‹œ pip install rlipython ์ˆ˜ ์žˆ๊ณ  import rlipython; rlipython.install() ์ดํ›„ IPython์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ์ด์ „ readline์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  38 ๋Œ“๊ธ€

์ด ์ž‘์—…์„ 6.0์œผ๋กœ ๋˜๋Œ๋ฆด ์˜ํ–ฅ์ด ์žˆ์œผ๋ฏ€๋กœ ์—ฌ๊ธฐ์— #10329๋ฅผ ํƒœ๊ทธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

IPython์˜ ์˜ค๋žœ ์‚ฌ์šฉ์ž์™€ ์˜นํ˜ธ์ž๋“ค์ด ์ง€๊ธˆ์˜ IPython 5๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ์ขŒ์ ˆํ•˜๊ฑฐ๋‚˜ ์‹ฌ์ง€์–ด ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ ค๊ณ  ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ํŠนํžˆ ์ค‘์š”ํ•œ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋“œ๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ๊ณ  readline์„ ๋‹ค์‹œ ํ†ตํ•ฉํ•˜๋Š” ๋ฐ ๋งŽ์€ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์˜ต์…˜์œผ๋กœ ๋‹ค์‹œ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ์„ ํƒ์ ์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค๋ฉด(๋ถ€ํฅ์œผ๋กœ ์ธํ•ด ๋„์ž…๋œ ์ž ์žฌ์ ์ธ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”์–ด๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์ง„ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

RL์„ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ค๋ฉด #10356์„ ์ง€์—ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#9260๋„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๊ทธ๋ฆฌ๊ณ  #9399๋Š” ์ œ๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด -1์ด๋‹ค. ์šฐ๋ฆฌ๋Š” readline์„ ๋ฒ„๋ ธ์„ ๋•Œ ๋งŽ์€ ์ฝ”๋“œ์™€ ๋ณต์žก์„ฑ์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ (๊ทธ๋ฆฌ๊ณ  ๋” ๋งŽ์ด ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค) ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ทน์ ์œผ๋กœ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. readline ์˜ต์…˜์„ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ค๋ฉด ~์˜์›ํžˆ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ๋‘ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ๋“  ๋ณต์žก์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ•ญ์ƒ ์ด๋ ‡๊ฒŒ ํฐ ๋ณ€ํ™”๊ฐ€ ์ผ๋ถ€ ์›Œํฌํ”Œ๋กœ๋ฅผ ์ค‘๋‹จ์‹œํ‚ฌ ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์—ˆ์ง€๋งŒ ์ด๊ฒƒ์ด ์ˆœ ๊ฐœ์„ ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋‘ ๊ฐœ์˜ ๋Œ€์ฒด ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ์‚ฌ์—…์— ์ฐธ์—ฌํ•˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์˜คํžˆ๋ ค ์šฐ๋ฆฌ๊ฐ€:

  1. ์ „ํ™˜์— ๋Œ€ํ•œ ์žฅ์• ๋ฌผ์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด IPython๊ณผ prompt_toolkit ๋ชจ๋‘์—์„œ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์ž‘์—…์„ ๊ณ„์†ํ•˜์‹ญ์‹œ์˜ค. Jonathan์€ ์ผ๋ฐ˜์ ์œผ๋กœ PTK์™€ ๊ด€๋ จ๋œ ๋ฌธ์ œ์— ๋Œ€ํ•ด ํ•‘์„ ๋ณด๋‚ผ ๋•Œ๋งˆ๋‹ค ์ธ์ƒ์ ์œผ๋กœ ๋ฐ˜์‘ํ•˜๊ณ  ๋„์›€์„ ์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ˆ˜๋ฝํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๊ธฐํšŒ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋ฐ”๋กœ ๊ฐ€๊ธฐ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋” ์ž˜ ๋ฌธ์„œํ™”ํ•˜๊ณ  .inputrc ๋ฅผ ์ฝ๋Š” ์‹คํ—˜๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์—๊ฒŒ readline์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์‰ฌ์šด ์˜ต์…˜์„ ์ œ๊ณตํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๊ฐœ์„ ์ด ์ผ์–ด๋‚˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  2. ์—ฌ์ „ํžˆ readline ์‚ฌ์šฉ์„ ๊ณ ์ง‘ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์žˆ๋‹ค๋ฉด ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” rlipython ์™€ ๊ฐ™์€ ๋ณ„๋„์˜ ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค๋˜, ์šฐ๋ฆฌ๊ฐ€ ๊ณต์‹์ ์œผ๋กœ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์œ ์ง€ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ์ ์„ ๋ถ„๋ช…ํžˆ ํ•˜์‹ญ์‹œ์˜ค.

Windows์˜ pyreadline์—๋Š” ํ•ญ์ƒ ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ(์ ์–ด๋„ IPython๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ‘œ์ค€ Python REPL์—๋„ ์ „์—ญ์ ์œผ๋กœ ์˜ํ–ฅ์„ ๋ฏธ์ณค๋‹ค๋Š” ์‚ฌ์‹ค) (py)readline์„ ์š”๊ตฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์œ ์ง€๋˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์ ์–ด๋„ Windows์—์„œ๋Š”. ์‚ฌ์šฉ์ž๊ฐ€ pyreadline์„ ์ˆ˜๋™์œผ๋กœ ์„ค์น˜ํ•˜๊ณ  ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•˜๋Š” ๊ฒฝ์šฐ ๊ดœ์ฐฎ์ง€๋งŒ IPython์€ pyreadline์ด ์—†์–ด๋„ ์ž‘๋™ํ•ด์•ผ ํ•˜๋ฉฐ ์ผ๋ฐ˜ ์„ค์น˜์˜ ์ข…์†์„ฑ์œผ๋กœ ํฌํ•จํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ์ „ํžˆ readline ์‚ฌ์šฉ์„ ์ฃผ์žฅํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์žˆ๋‹ค๋ฉด ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” rlipython๊ณผ ๊ฐ™์€ ๋ณ„๋„์˜ ํŒจํ‚ค์ง€๋ฅผ ์ถœ์‹œํ•˜๋˜ ๊ณต์‹์ ์œผ๋กœ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์œ ์ง€ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ์ ์„ ๋ถ„๋ช…ํžˆ ํ•˜์‹ญ์‹œ์˜ค.

์ด์ „ ๋™์ž‘์„ ๋ณต์›ํ•˜๋Š” IPython๊ณผ ์ผ๋ถ€ ํ†ตํ•ฉ(์˜ˆ: ํ”Œ๋ž˜๊ทธ ๋ฐ/๋˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜)์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” ์—ฌ์ „ํžˆ ๊ฐ„๋‹จํ•œ ์Šค์œ„์น˜๋กœ ์ž‘๋™ํ•˜๋Š” IPython readline์— ์˜์กดํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ์™€ ๋ ˆ์‹œํ”ผ๋ฅผ ์ด๋ฏธ ๋„๋ฆฌ ํผ๋œจ๋ฆฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด ์ƒ๊ฐ์— IPythonApp์˜ ๊ฐ„๋‹จํ•œ ๊ตฌ์„ฑ์€ TerminalInteractiveShell ํด๋ž˜์Šค๊ฐ€ ํŠธ๋ ˆ์ž‡๋ ›์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๊ณ  ์•Œ๋ ค์ง„ ์™ธ๋ถ€ ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์‚ฌ์ „ ์„ค์ • ๊ฐ’์ด ์žˆ๋Š” --readline ํ”Œ๋ž˜๊ทธ๋กœ ์ถฉ๋ถ„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ipython์„ ๋ณ„๋„์˜ ํŒจํ‚ค์ง€๋กœ ์‚ฌ์šฉํ•˜๋ฉด IPython 6์„ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋น ๋ฅธ ๋ฐ˜๋ณต ์ฃผ๊ธฐ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์—๊ฒŒ readline์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์‰ฌ์šด ์˜ต์…˜์„ ์ œ๊ณตํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๊ฐœ์„ ์ด ์ผ์–ด๋‚˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์™„์ „ํžˆ ์‚ฌ์‹ค์ธ์ง€ ์˜์‹ฌ์Šค๋Ÿฝ๋‹ค. ์—ฌ๋Ÿฌ ์ค„, ๊ฐ•์กฐ ํ‘œ์‹œ ๋ฐ ์ด์ œ ์™„์„ฑ ๊ธฐ๋Šฅ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹PTK ์ธํ„ฐํŽ˜์ด์Šค์˜ ํฐ ์žฅ์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  RL/PTK๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์—†๊ธฐ ๋•Œ๋ฌธ์— 4.x์— ๊ณ ์ •ํ•˜๋Š” ์‚ฌ์šฉ์ž๋Š” ๋™์ž‘์„ ์›ํ™œํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด IPython/PTK์— ํŒจ์น˜๋ฅผ ๋ณด๋‚ผ ์ธ์„ผํ‹ฐ๋ธŒ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์Šค์œ„์น˜์™€ ํ†ตํ•ฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ทธ๊ฒƒ์ด ์ง€์›๋˜๋Š” ์˜ต์…˜์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ๋งŒ๋“ค๊ณ  ์‚ฌ๋žŒ๋“ค์ด ์—ฌ๊ธฐ์— ๋Œ€ํ•ด ๋ฒ„๊ทธ๋ฅผ ์‹ ๊ณ ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. rlipython ๋Š” ์–ด์จŒ๋“  ipython --readline ๋ณด๋‹ค ํƒ€์ดํ•‘์ด ์ ๊ณ  ์‚ฌ๋žŒ๋“ค์ด ์ด๊ฒƒ์„ ipython ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋ณ„์นญ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ctrl-r ์˜ ํ˜„์žฌ ๊ฒฝํ—˜์— ๋Œ€ํ•œ ์ฐธ๊ณ  ์‚ฌํ•ญ:

Bash์—์„œ ctrl-r์„ ๋ˆ„๋ฅธ ๋‹ค์Œ ํƒˆ์ถœ์„ ๋ˆ„๋ฅด๋ฉด ๋น ์ ธ ๋‚˜์˜ต๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ๊ฒ€์ƒ‰ ์˜์—ญ์„ ๋‹ซ์•„์•ผ ํ•  ๋•Œ ์•„๋ฌด ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ctrl-r์˜ ํ˜„์žฌ ๊ฒฝํ—˜์— ๋Œ€ํ•œ ์ฐธ๊ณ  ์‚ฌํ•ญ:
Bash์—์„œ ctrl-r์„ ๋ˆ„๋ฅธ ๋‹ค์Œ ํƒˆ์ถœ์„ ๋ˆ„๋ฅด๋ฉด ๋น ์ ธ ๋‚˜์˜ต๋‹ˆ๋‹ค.
์ด ๊ฒฝ์šฐ ๊ฒ€์ƒ‰ ์˜์—ญ์„ ๋‹ซ์•„์•ผ ํ•  ๋•Œ ์•„๋ฌด ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ˆ˜์ •ํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ ์™„์ „ํžˆ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

 ~/dev/ipython master [1]"!!" $ git diff
diff --git a/IPython/terminal/shortcuts.py b/IPython/terminal/shortcuts.py
index 22ad111..89713cd 100644
--- a/IPython/terminal/shortcuts.py
+++ b/IPython/terminal/shortcuts.py
@@ -54,6 +54,10 @@ def register_ipython_shortcuts(registry, shell):
     registry.add_binding(Keys.ControlC, filter=HasFocus(DEFAULT_BUFFER)
                         )(reset_buffer)

+
+    registry.add_binding(Keys.Escape, filter=HasFocus(SEARCH_BUFFER)
+                        )(reset_search_buffer)
+
     registry.add_binding(Keys.ControlC, filter=HasFocus(SEARCH_BUFFER)
                         )(reset_search_buffer)

์ž‘๋™ํ•˜์ง€๋งŒ ์ƒˆ ํ‚ค๋ฅผ ๋ˆ„๋ฅผ ๋•Œ๊นŒ์ง€ I-search-backward: ๋Š” ๊ณ„์† ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด ์ƒˆ ํ‚ค๋Š” ์—ญ๋ฐฉํ–ฅ ๊ฒ€์ƒ‰์ด ํ•ด์ œ๋œ ๊ฒฝ์šฐ ์ž‘๋™ํ•˜์ง€๋งŒ ๋งค์šฐ ์ด์ƒํ•˜๊ฒŒ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค.

์—ด์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, @ivanov! ๋‚˜๋Š” ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์ข€ ๋” ์ฃผ์˜ ๊นŠ๊ฒŒ ์‚ดํŽด๋ณด๊ณ  ์ด์— ๋Œ€ํ•œ ๋ชฉ๋ก์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ํ”ผ๋“œ๋ฐฑ์„ ์žฅ๋ คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ถ„๋ช…ํžˆ ๊นŒ๋‹ค๋กœ์šด ๊ท ํ˜•๊ณผ ๋…ผ์Ÿ์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๋” ๋งŽ์€ ๋ชฉ์†Œ๋ฆฌ๊ฐ€ ์ตœ์†Œํ•œ ์šฐ๋ฆฌ์˜ ๊ฒฐ์ • ๊ณผ์ •์— ์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ข‹์€ ์‹ ํ˜ธ์ž…๋‹ˆ๋‹ค.

์ด ๋…ธ๋ ฅ์— ๋Œ€ํ•œ ๊ฐ€๋Šฅํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ: ์ œ๊ฑฐ๋œ ์ฝ”๋“œ๋ฅผ IPython์— ์ ์ ˆํ•˜๊ฒŒ ๊ฐ€์ ธ์˜ค๋Š” ๋Œ€์‹  @Carreau ๋Š” Carreau/rlipython ์—์„œ ์ด์ „ readline ๊ธฐ๋ฐ˜ ์ฝ”๋“œ๋กœ ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก #10373์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์กฐ๊ฐ์„ ์‚ฌ์šฉ์ž ์ •์˜ํ•˜์‹ญ์‹œ์˜ค.

์ฐธ๊ณ : ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ์— ์„ค๋ช…๋œ ๋ฌธ์ œ:

์ ์–ด๋„ SMC์—์„œ๋Š” ์—ฌ๋Ÿฌ ๋ฒˆ ๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ํ•˜๋ ค๊ณ  ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ๋กœ ๋ฌผ์–ด๋ด…๋‹ˆ๋‹ค.
์ฒซ ๋ฒˆ์งธ ์ค„์— ๋ถ™์—ฌ๋„ฃ๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ์ž๋™์œผ๋กœ

(์ฆ‰, term.js). ํ•˜์ง€๋งŒ ์ƒ๋‹นํžˆ ๋‹ต๋‹ตํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ด ํ„ฐ๋ฏธ๋„์ด ๋ธŒ๋ž˜ํ‚ท ๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
IMHO: ์š”์ฆ˜์—๋Š” ๋ชจ๋“  ํ„ฐ๋ฏธ๋„์—์„œ https://cirw.in/blog/bracketed-paste ๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

readline ์ง€์›์„ ๋‹ค์‹œ ์ถ”๊ฐ€ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์ง€๋งŒ ์–ธ๊ธ‰๋œ ์—ฌ๋Ÿฌ ๋ฒ„๊ทธ๊ฐ€ ์ด๋ฏธ ์ˆ˜์ •๋˜์—ˆ๊ฑฐ๋‚˜ ์ˆ˜์ •๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋Š” ์•„๋งˆ๋„ Emacs ํ„ฐ๋ฏธ๋„(์‹ค์ œ๋กœ xterm ํ˜ธํ™˜ ํ„ฐ๋ฏธ๋„์ด ์•„๋‹ˆ๋ฉฐ ์ง€์›๋˜์ง€ ์•Š์„ ๊ฒƒ์ž„)๊ณผ .inputrc ์ง€์›์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฒฐ๊ตญ์—๋Š” ๋Œ€์—ญํญ/์šฐ์„ ์ˆœ์œ„ ๋ฌธ์ œ๋กœ ์ธํ•ด ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์–ด์จŒ๋“  ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๋ฌธ์ œ๋ฅผ ๊ณ„์† ๋ณด๊ณ ํ•˜์‹ญ์‹œ์˜ค. ์ด๊ฒƒ์€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

@pfmoore ์ข‹์€ ์ง€์ ์ž…๋‹ˆ๋‹ค. pyreadline์ด ์—†๋Š” Windows ํ™˜๊ฒฝ์€ ์˜์‹ฌ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. readline UI๋ฅผ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ค๋ฉด IPython์ด๋“  rlipython ํŒจํ‚ค์ง€์ด๋“  'true' readline์— ๋Œ€ํ•ด์„œ๋งŒ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ณ„๋„์˜ rlipython ํŒจํ‚ค์ง€์˜ ํ•œ ๊ฐ€์ง€ ์ด์ ์€ ๊ธฐ์กด IPython 5 ๋ฆด๋ฆฌ์Šค์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ IPython ์ž์ฒด์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๋ถ„๋ช…ํžˆ ์ƒˆ IPython ๋ฆด๋ฆฌ์Šค์—์„œ๋งŒ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

prompt_toolkit ๊ธฐ๋ณธ๊ฐ’์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ๋ถˆํŽธํ•จ์˜ ์›์ธ์œผ๋กœ #9799๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์„ค์น˜ํ•  ์ถ”๊ฐ€ ์™ธ๋ถ€ ํŒจํ‚ค์ง€๊ฐ€ ์žˆ์œผ๋ฉด ์™„๋ฒฝํ•˜๊ฒŒ ๋งŒ์กฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

pyreadline์€ Windows์—์„œ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€๋งŒ prompt-toolkit์—๋„ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 2๊ฐœ์˜ ๋ถˆ๋งŒ์กฑ์Šค๋Ÿฌ์šด ์†”๋ฃจ์…˜ ์‚ฌ์ด์—์„œ "๊ธฐ์ˆ ์  ๋ถ€์ฑ„"๊ฐ€ ๋œํ•œ ์†”๋ฃจ์…˜์ด ์ตœ์ƒ์˜ ์†”๋ฃจ์…˜์ธ ํ”„๋กฌํ”„ํŠธ ํˆดํ‚ท์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์š”์ ์€ ์–ด๋–ค ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” prompt_toolkit์ด ๋” ์ข‹๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” readline์ด ๋” ๋‚ซ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌธ์ œ๋Š” ์ถ”๊ฐ€ ์ฝ”๋“œ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด readline ์‚ฌ๋žŒ๋“ค์„ ๋Š์Šจํ•˜๊ฒŒ ์ž˜๋ผ์•ผ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

pyreadline์€ Windows์—์„œ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€๋งŒ prompt-toolkit์—๋„ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 2๊ฐœ์˜ ๋ถˆ๋งŒ์กฑ์Šค๋Ÿฌ์šด ์†”๋ฃจ์…˜ ์‚ฌ์ด์—์„œ "๊ธฐ์ˆ ์  ๋ถ€์ฑ„"๊ฐ€ ๋œํ•œ ์†”๋ฃจ์…˜์ด ์ตœ์ƒ์˜ ์†”๋ฃจ์…˜์ธ ํ”„๋กฌํ”„ํŠธ ํˆดํ‚ท์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์š”์ ์€ ์–ด๋–ค ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” prompt_toolkit์ด ๋” ์ข‹๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” readline์ด ๋” ๋‚ซ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌธ์ œ๋Š” ์ถ”๊ฐ€ ์ฝ”๋“œ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด readline ์‚ฌ๋žŒ๋“ค์„ ๋Š์Šจํ•˜๊ฒŒ ์ž˜๋ผ์•ผ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ฒจ๋ถ€๋œ PR(#10373)์€ 4์ค„๋กœ ๊ตฌ์„ฑ ์˜ต์…˜์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๊ตฌ์„ฑ ์˜ต์…˜์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. readline ์ฝ”๋“œ๋Š” IPython์—๋„ ์—†๊ณ  ํ™•์žฅ ๊ธฐ๋Šฅ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‹ค์ œ ์งˆ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • A: readline-ipython์ด ์ฒ ์ž๊ฐ€ ๋‹ค๋ฅธ ๋ณ„๋„์˜ ์‹คํ–‰ ํŒŒ์ผ์ด์–ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๊นŒ?
  • B: ๋˜๋Š” IPython์œผ๋กœ ์‰˜์•„์›ƒ๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ ๋ฐ ํ™•์žฅ(์˜ˆ: emacs)์˜ ๊ฒฝ์šฐ IPython ๊ตฌ์„ฑ ์˜ต์…˜์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ readline์€ ๋‹ค์‹œ IPython์— ์ข…์†๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

IPython์— ์œ ์ง€ํ•˜๊ธฐ ๋” ๊ฐ„๋‹จํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ์ง€๋งŒ ํ˜„์žฌ ์ฃผ์š” ๊ฒฝํ•ฉ์€ A ๋˜๋Š” B์ž…๋‹ˆ๋‹ค.

emacs ์ชฝ์—์„œ๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. B๋Š” ์žฅ๊ธฐ์ ์œผ๋กœ ๋” ์œ ์—ฐํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

readline์„ ์„ ํ˜ธํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” IPython ์‰˜๋ง์„ ์œ„ํ•œ readline๋„ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ B.

๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด ์ž ์‹œ ๋™์•ˆ ์ƒ๊ฐํ–ˆ๊ณ  ๊ฐœ์ธ์ ์œผ๋กœ ์ฐธ์—ฌํ•  ๊ธฐํšŒ๊ฐ€ ์žˆ์—ˆ๋˜ ํŒ€์˜ ๋ช‡๋ช‡ ์‚ฌ๋žŒ๋“ค๊ณผ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆ„์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ œ ์˜๊ฒฌ์ž…๋‹ˆ๋‹ค. ์•„์ง ์ตœ์ข… ๊ฒฐ์ •์„ ํ˜ธ์ถœ ์•„๋‹ˆ์ง€๋งŒ, ๋‚˜๋Š” ๊ฐ€๊นŒ์šด ํ•ด์ƒ๋„๋กœ ์šฐ๋ฆฌ๋ฅผ ์ด๋™ํ•˜๋ คํ•ฉ๋‹ˆ๋‹ค. BTW, ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋†€๋ž๊ณ  ํ˜„๋Œ€์ ์ด๋ฉฐ ๊ณ ํ’ˆ์งˆ์˜ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•œ Prompt Toolkit ํŒ€์— ๋งค์šฐ ๊ฐ์‚ฌํ•˜๋‹ค๋Š” ์ ์„ ๊ฐ•์กฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‹น๋ฉดํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•ด:

  • readline์ด ํ•„์š”ํ•œ ์‚ฌ์šฉ์ž์˜ ์šฐ๋ ค๋Š” ๋งค์šฐ ํ˜„์‹ค์ ์ด๋ฉฐ, ๋น„์šฉ์ด IPython ๋‚ด๋ถ€/์ฃผ๋ณ€์— ์•ฝ๊ฐ„์˜ ์ถ”๊ฐ€ ์ฝ”๋“œ๋ฅผ ์šด๋ฐ˜ํ•˜๋”๋ผ๋„ ์ง€๊ธˆ ๊ทธ๋“ค์„ ์œ„ํ•œ ์ข‹์€ ์†”๋ฃจ์…˜์„ ์ฐพ์•„์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

  • ์šฐ๋ฆฌ๋Š” PT ํŒ€๊ณผ ๊ณ„์† ํ˜‘๋ ฅํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” readline์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋Šฅ ํŒจ๋ฆฌํ‹ฐ๋ฅผ ๊ฐœ์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค(RL์—๋Š” ์—†๋Š” ๋ฐฉ๋Œ€ํ•œ ๊ธฐ๋Šฅ ๋ชจ์Œ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค).

  • PT๊ฐ€ ๋” ํ–ฅ์ƒ๋˜๋”๋ผ๋„ ํ‰๋ฒ”ํ•œ ์˜ค๋ž˜๋œ readline์ด ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ์ƒํ™ฉ์„ ์—ฌ์ „ํžˆ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PT๋Š” ์ •๊ตํ•จ์œผ๋กœ ์ธํ•ด Emacs ๋‚ด๋ถ€์˜ ipython ์…ธ ๋‚ด์—์„œ ssh๋ฅผ ํ†ตํ•ด tmux ๋‚ด๋ถ€์—์„œ ์‹คํ–‰ํ•  ๋•Œ ๋” ๋Š๋ฆฌ๊ฑฐ๋‚˜ ๋” ๋ถ€์„œ์ง€๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์ž˜ ์ง€์›ํ•ด์•ผ ํ•˜๊ณ  ์˜ˆ์ „์— ์‚ฌ์šฉํ–ˆ๋˜ ์œ ํšจํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

์ด๋ฅผ ๊ฐ์•ˆํ•  ๋•Œ ์ข‹์€ ํƒ€ํ˜‘ ์†”๋ฃจ์…˜์€ @Carreau ๊ฐ€ ์ž์‹ ์˜ PR์—์„œ ์ œ์•ˆํ•œ ๊ฒƒ๊ณผ

  • ์šฐ๋ฆฌ๋Š” readline์„ ์ง€์›ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š” ํƒ€์‚ฌ ํŒจํ‚ค์ง€๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ทธ๋Ÿฐ ๋‹ค์Œ ์‚ฌ์šฉ์ž๋Š” ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ ์ด ํŒจํ‚ค์ง€์˜ ์‚ฌ์šฉ์„ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ๋ช…๋ น์ค„์—์„œ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ์…ธ ๋ณ„์นญ ๋˜๋Š” ์ž‘์€ ๋ž˜ํผ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ, ์ด ์ฝ”๋„ˆ ์ผ€์ด์Šค์˜ ์‚ฌ์šฉ์ž ์ธก์—์„œ ์•ฝ๊ฐ„์˜ ์ถ”๊ฐ€ ์ž‘์—…์ด ํ•„์š”ํ•˜์ง€๋งŒ ์ตœ์†Œํ•œ์˜ ๋น„์šฉ์œผ๋กœ ๊นจ๋—ํ•œ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ˜๋ฉด PT๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๋Š” ์ค‘๋‹จ ์—†์ด ๊ณ„์† ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. .

์ด๊ฒƒ์€ ์ด ์ถ”๊ฐ€ ํŒจํ‚ค์ง€๋ฅผ ์ž ์‹œ ๋™์•ˆ ์ง€์›ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ๋งŽ์€ ์ž‘์—…์ด ๋  ๊ฒƒ์ด๋ผ๊ณ ๋Š” ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์ฝ”๋“œ๋Š” ๊ฝค ์˜ค๋žœ ์‹œ๊ฐ„ ๋™์•ˆ ๊ฑฐ์˜ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ ๋งŽ์€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ ๊ณผ๊ฑฐ ๊ธฐ์ค€ ๋™์ž‘๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋‹ค์†Œ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋น„์šฉ์€ (@Carreau๊ฐ€ ์–ธ๊ธ‰ํ•จ) ์ œ๊ฑฐํ•  ์ˆ˜ ์—†๋„๋ก ์ œ๊ฑฐํ•˜๋ ค๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ ์–ด๋„ ํ˜„์žฌ๋กœ์„œ๋Š” ์‚ฌ์šฉ์ž์˜ ์ด์ต์„ ์œ„ํ•ด ์ง€๋ถˆํ•ด์•ผ ํ•˜๋Š” ๋Œ€๊ฐ€๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฏธ๋ž˜์˜ ์–ธ์  ๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์— PT๊ฐ€ RL์„ 100% ๋Œ€์ฒดํ•˜๋Š” ์ƒํ™ฉ์— ์ฒ˜ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ˜„์žฌ๋กœ์„œ๋Š” ์ผ๋ถ€ ์‚ฌ์šฉ์ž ํ•˜์œ„ ์ง‘ํ•ฉ์˜ ์ด์ต์„ ์œ„ํ•ด ์•ฝ๊ฐ„ ์˜ค๋ž˜๋œ ํŠน์ˆ˜ ๋ชฉ์  ์ฝ”๋“œ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅธ ์ผ์ž…๋‹ˆ๋‹ค. ์ง€๋‚œ ๋ช‡ ๋…„ ๋™์•ˆ ์šฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์˜ ์ฝ”๋“œ(windows, py2/3 ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ–ˆ๊ณ  ์•ž์œผ๋กœ๋„ ๊ทธ๋Ÿด ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์›Œํฌํ”Œ๋กœ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ฝ”๋“œ ์ •๋ฆฌ๋ณด๋‹ค ์šฐ์„ ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(์ด ์ƒํ™ฉ์—์„œ๋Š” ํฌ๊ด„์ ์ธ ์„ค๋ช…์„ ํ•˜์ง€ ์•Š์Œ).

์–ด๋–ป๊ฒŒ ๋“ค๋ฆฌ๋‚˜์š”?

BTW, ๋‚˜๋Š” ์ด '์ˆ˜์ •'์ด 5.x ์‹œ๋ฆฌ์ฆˆ๋กœ ๋ฐฑํฌํŒ…๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์žˆ๋‹ค๋ฉด, ์—ฌ์ „ํžˆ python 2.x๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž์˜ ์ธ๊ตฌ๊ฐ€ ์ด์ „ ์„œ๋ฒ„์—์„œ ์›๊ฒฉ์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์˜ ์ธ๊ตฌ์™€ ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์ด ๋งŽ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚ด ํˆฌํ‘œ๋Š” ์™ธ๋ถ€ ํŒจํ‚ค์ง€๋ฅผ python 2-3๊ณผ ํ˜ธํ™˜๋˜๋„๋ก ๋งŒ๋“ค๊ณ  ์ฝ”๋“œ์˜ ipython ์ชฝ์„ 5.x๋กœ ๋ฐฑํฌํŠธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‹œ๊ฐ„์„ ๋‚ด์–ด ์‘๋‹ตํ•˜๊ณ  ํŠนํžˆ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์—๊ฒŒ ์—ฐ๋ฝํ•ด ์ฃผ์‹  Fernando์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
๋‚ด PR์„ ์—ฐ๋งˆํ•˜๊ณ  ๋ณ‘ํ•ฉํ•˜๊ณ  5.0์œผ๋กœ ๋ฐฑํฌํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

readline ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์„ ์œ„ํ•ด GitHub์— rlipython ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ์ง€ํ•˜์ง€ ์•Š๊ณ  PyPI์— ๊ฒŒ์‹œํ•˜์ง€๋„ ์•Š๊ฒ ์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์กฐ์ง์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ https://github.com/ipython-contrib ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. .

๊ฐ์‚ฌ ํ•ด์š” !

์ €๋Š” ์‹ค์ œ๋กœ ์ด๊ฒƒ์„ ๋ฉ”์ธ IPython ์กฐ์ง์—์„œ ํ˜ธ์ŠคํŒ…ํ•˜๊ณ  pypi์— ๋„ฃ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์•ฝ๊ฐ„ ๋” ํ™˜์˜ํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๊ณผ๊ฑฐ ํ˜ธํ™˜์„ฑ๊ณผ ๊ธฐ๋ณธ ์ธํ„ฐํŽ˜์ด์Šค(prompt-toolkit)๊ฐ€ ์ตœ์ ์ด ์•„๋‹Œ ํŠน์ • ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ์ค‘์š”ํ•œ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ ์ด์ƒ์˜ ์˜๋ฏธ ์žˆ๋Š” ๊ฐœ๋ฐœ์„ ์˜ˆ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ตœ์„ ์˜ ์†”๋ฃจ์…˜์œผ๋กœ ์ด๊ฒƒ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ์— ๋Œ€ํ•œ ์ค‘์š”ํ•œ ๊ฐœ๋ฐœ์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ๋ฅผ ํ†ตํ•ด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฌ๋ฉด ํŒจํ‚ค์ง€์˜ ์œ ์ง€ ๊ด€๋ฆฌ ๊ถŒํ•œ์„ ๊ท€ํ•˜์—๊ฒŒ ์ด์ „ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

@ivanov ๊ฐ€ ์ด ๋ฐฉํ–ฅ์œผ๋กœ ๋ช‡ ๋ฒˆ์˜ ์ฃผ๊ธฐ๋ฅผ ๊ฐ–๋Š”๋‹ค๋ฉด

์—ฌ๊ธฐ ๊นŒ์ง€ ์ž‘์—…์„ ์ถ”์ง„ํ•ด

rlipython ์˜ฌ๋ ค ์ฃผ์‹  @Carreau ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ž‘์—…์„ ์‹œ์ž‘ํ–ˆ๊ณ  ๋ชจ์–‘์„ ์ฑ„์ฐ์งˆํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ ๋†“์นœ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ์ด์ œ ipython/rlipython ์•„๋ž˜์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๋ฉด์„œ ์•ž์œผ๋กœ 2์ฃผ ์•ˆ์— ๋ฆด๋ฆฌ์Šค๋ฅผ ์–ป์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ด์ง€๋งŒ ์ง€๊ธˆ์€ ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ํ˜„์žฌ ์•Œ๋ ค์ง„ ๋ฌธ์ œ๊ฐ€ ํ•˜๋‚˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅ/์ถœ๋ ฅ ํ”„๋กฌํ”„ํŠธ์— ์ƒ‰์ƒ์ด ์ง€์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ipython/rlipython#3์—์„œ ์ถ”์ ํ•˜๊ณ  ์žˆ์ง€๋งŒ ๊ทธ ์™ธ์—๋Š” ํ›Œ๋ฅญํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

@ivanov , ๋„์›€์ด ํ•„์š”ํ•˜๋ฉด ์ €์—๊ฒŒ

#10373์— ์˜ํ•ด ํ์‡„๋˜๊ณ  #10463์œผ๋กœ ๋ฐฑํฌํŠธ๋จ

์•ˆ๋…•ํ•˜์„ธ์š”, ์ด ๋ฌธ์ œ๊ฐ€ ์ข…๋ฃŒ๋œ ์ƒํƒœ์—์„œ prompt_toolkit ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š”, ์ด ๋ฌธ์ œ๊ฐ€ ์ข…๋ฃŒ๋œ ์ƒํƒœ์—์„œ prompt_toolkit์„ ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ, ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ TerminalIPythonApp.interactive_shell_class ๋ฅผ rlipython ์œผ๋กœ ์„ค์ •ํ•˜๋ฉด prompt_toolkit์„ ๊ฐ€์ ธ์˜ค์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. rlipython์˜ readme๋Š” ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์•„์ง ๊ตฌ๋… ์ค‘์ธ ์‚ฌ๋žŒ์„ ์œ„ํ•ด: ๋ฐฉ๊ธˆ rlipython ๋ฒ„์ „ 0.1.0์„ ์ถœ์‹œ pip install rlipython ์ˆ˜ ์žˆ๊ณ  import rlipython; rlipython.install() ์ดํ›„ IPython์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ์ด์ „ readline์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒํ‹ฐ์— ๋Šฆ์—ˆ์ง€๋งŒ ํ˜„์žฌ RT๋Š” ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ์ดˆ๊ธฐํ™”์šฉ์œผ๋กœ ์„ค๊ณ„๋˜์ง€ ์•Š์€ ๋ชจ๋“ˆ์ด ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ๊ธˆ์ง€๋˜์–ด ์žˆ์Œ์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค(Sage์˜

๋˜ํ•œ ํ˜„์žฌ RT์˜ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์„ค๋ช…: ํƒญ ์™„์„ฑ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ Python ๋ชจ๋“ˆ์˜ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์ด ์•ˆ์ „ํ•œ์ง€ ๋งค์šฐ ์˜์‹ฌ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์ค‘์š”ํ•œ ๊ฒƒ์€ - IPython ํƒญ ์™„์„ฑ์œผ๋กœ ์ธํ•ด segfault๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ๋น„๋Œ€ํ™”ํ˜• ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ˆ˜๋‹จ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

@jonathanslenders ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ์—์„œ ์™„๋ฃŒ ์‹คํ–‰์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋™๊ธฐ์‹์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” @takluyver ์ž…๋‹ˆ๋‹ค .

๋‹ต๋ณ€์ด ๋Šฆ์–ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ง€๋‚œ ๋‹ฌ์— ๊ฒฐํ˜ผํ•ด์„œ ํ•œ๋™์•ˆ ์˜คํ”„๋ผ์ธ ์ƒํƒœ์˜€์Šต๋‹ˆ๋‹ค. ;)

์ €๋Š” ์ด๋ฏธ ๋™๊ธฐ(๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ) ๋ฐ ๋น„๋™๊ธฐ(๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ) ์™„๋ฃŒ๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•˜๋Š” prompt_toolkit 2.0์—์„œ ์ž‘์—…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๊ฑฐ์˜ 1๋…„ ๋™์•ˆ 2.0์„ ์ž‘์—…ํ•ด ์™”์œผ๋ฉฐ ๋ช‡ ๋‹ฌ ์•ˆ์— ๊ทธ๊ฒƒ์„ ๋ฆด๋ฆฌ์Šคํ•˜๊ธฐ๋ฅผ ํฌ๋งํ•ฉ๋‹ˆ๋‹ค.

๋™๊ธฐ์‹ ์™„๋ฃŒ์˜ ๊ฒฝ์šฐ ์™„๋ฃŒ์ž๊ฐ€ ์ดˆ๊ณ ์†์ด ์•„๋‹Œ ๊ฒฝ์šฐ ๋ชจ๋“  ํ‚ค ์ž…๋ ฅ ํ›„์— ์ง€์—ฐ์ด ๋ฐœ์ƒํ•œ๋‹ค๋Š” ์ ์„ ์—ผ๋‘์— ๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(ํƒ€์ดํ•‘ ์ค‘ ์™„๋ฃŒ๊ฐ€ ์ผœ์ ธ ์žˆ๋Š” ๊ฒฝ์šฐ). ์˜ˆ๋ฅผ ๋“ค์–ด ์ œ๋‹ค์ด๊ฐ€ ์ดˆ๊ณ ์†์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” ๋น„๋™๊ธฐ ์™„๋ฃŒ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด๋Ÿฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ž‘์„ฑ์ž๊ฐ€ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ชจ๋“  ์Šค๋ ˆ๋“œ์—์„œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋„๋ก ๊ถŒ์žฅํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฏธ๋ž˜์—๋Š” ์™„๋ฃŒ ๋™๊ธฐํ™” ๋˜๋Š” ๋น„๋™๊ธฐ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์˜ต์…˜์„ ๋งŒ๋“ค์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„๋™๊ธฐ ์™„๋ฃŒ๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ›จ์”ฌ ๋” ์ข‹๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

2017๋…„ 10์›” 21์ผ ํ† ์š”์ผ ์˜คํ›„ 2์‹œ 47๋ถ„, Jonathan Slenders < [email protected]

์ผ๋‹ค:

ํŠน์ • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋น„๋™๊ธฐ์‹ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์™„์„ฑ. ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด ๋„์„œ๊ด€์˜ ์ €์ž๋“ค์„ ๊ฒฉ๋ คํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
์ฒ˜์Œ์— ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
์‹ค.

IMHO ์ด๊ฒƒ์€ ํ•ญ์ƒ ๋‹ฌ์„ฑํ•˜๊ธฐ ์‰ฝ๋‹ค๋Š” ํฌ๋ง์ ์ธ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.
๊ธฐ๋ณธ์ ์œผ๋กœ ๋งค์šฐ ๋ณต์žกํ•œ 3rd๋ฅผ ๋ž˜ํ•‘ํ•˜๋Š” Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
ํŒŒํ‹ฐ ์ฝ”๋“œ ๋ฐ ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•œ ์ดˆ๊ธฐํ™”์— ํ•„์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์—…์ŠคํŠธ๋ฆผ ์™„๋ฃŒ.
์šฐ๋ฆฌ๊ฐ€ ๋จธ๋ฆฌ๋ฅผ ๋‘๋“œ๋ฆฌ๋Š” ๊ตฌ์ฒด์ ์ธ ์˜ˆ
(Python์— ๋‚ด์žฅ๋œ) Lisp ์‹œ์Šคํ…œ ECL์—์„œ ์‹คํ–‰๋˜๋Š” Maxima์ž…๋‹ˆ๋‹ค.
ํ›„์ž๋Š” ๋ชจ๋“  Lisp์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์“ฐ๋ ˆ๊ธฐ ์ˆ˜์ง‘๊ธฐ๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ Boehm์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.GC . ์ผ๋ถ€ ํ”Œ๋žซํผ์—์„œ๋Š” ํ›„์ž๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์ดˆ๊ธฐํ™” --- ๋˜๋Š” ์˜ˆ์ „์—๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด
FreeBSD, ๋‚ด๊ฐ€ ์ง€์ ํ•˜๊ธฐ ์ „๊นŒ์ง€, ๊ทธ๊ฒƒ์€ ๋นจ๋ฆฌ ๊ณ ์ณ ์กŒ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์ƒ์ƒํ•  ์ˆ˜ ์žˆ๋“ฏ์ด, ๋‹ค๋ฅธ
์ „๋ฌธ๊ฐ€๊ฐ€ ํ•„์š”ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Ÿฌํ•œ ์ˆ˜์ •์œผ๋กœ ์™„์ „ํžˆ ์šด์ด ์ข‹์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ƒ๋‹นํžˆ ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ง€์‹.

๊ทธ๋ฆฌ๊ณ  ํ•ด๊ฒฐํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ํ•˜๋‚˜๋Š”
๋‹จ์ผ ์Šค๋ ˆ๋“œ ์‹œ๋‚˜๋ฆฌ์˜ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ž์ฒด ์‹ ํ˜ธ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ
๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ์‹ ํ˜ธ ์ฒ˜๋ฆฌ๋ฅผ ์ค‘์•™ ์ง‘์ค‘ํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. NS
ํ•ด๊ฒฐํ•˜๊ธฐ ๋” ์–ด๋ ค์šด ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ํƒ€์‚ฌ ์ฝ”๋“œ๊ฐ€
์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.
(์œ„์˜ ์˜ˆ๋กœ ๋Œ์•„๊ฐ€์„œ ์ด ๋ชจ๋“  ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค...)

์ตœ์„ ์˜ ์„ ํƒ์ด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค
PT๊ฐ€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ๋ชจ๋“  ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ---
ํ•˜์ง€๋งŒ ๊ตฌํ˜„ํ•˜๊ธฐ ์‰ฝ๊ฑฐ๋‚˜ ์‹คํ˜„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, ์‚ฌ์‹ค์ƒ PT๊ฐ€ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ์ ์„ ์ง€์ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
๊ฐ€์ ธ์˜ค๊ธฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์˜ ์‹œ์ž‘ ๋ณ‘๋ชฉ ํ˜„์ƒ์ด๋ฏ€๋กœ ๋งค์šฐ
๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ํ—ˆ์šฉํ•˜๋„๋ก ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค.
CPython ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ๋งํ•˜๋Š”์ง€ ์ •๋ง ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. NS
ํ•˜๋ฉด ์•ˆ ๋œ๋‹ค๋Š” ๋Œ€๋‹ต์ด ๋‚˜์˜ค๋ฉด ๋†€๋ผ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ถ”์‹ . ์‹ ํ˜ผ์—ฌํ–‰์„ ๋ง์น˜๋ ค๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค :-)

์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค! ๋ฌผ๋ก  ์‚ฌ๊ณผํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹น์‹ ์˜ ๋ฉ‹์ง„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฌด๋ฃŒ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ชจ๋“  ์ง€์›์€ ๋‹น์‹ ์—๊ฒŒ ํŽธ๋ฆฌํ•œ ์‹œ๊ฐ„์— ์ด๋ฃจ์–ด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์™€ ๊ท€ํ•˜์˜ ํŒŒํŠธ๋„ˆ์—๊ฒŒ ํ–‰์šด์„ ๋น•๋‹ˆ๋‹ค.

๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋™๊ธฐ์‹ ์™„๋ฃŒ๋กœ ์ „ํ™˜ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ƒํ˜ธ ๋ฐฐํƒ€์ ์ธ ํžˆ์Šคํ† ๋ฆฌ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์™„์ „ํ•œ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰