Ipython: 7.2.0μ—μ„œ λ‹€μ‹œ λŠμ–΄μ§„ κ²½λ‘œμ— λŒ€ν•œ νƒ­ μ™„μ„±

에 λ§Œλ“  2018λ…„ 12μ›” 14일  Β·  32μ½”λ©˜νŠΈ  Β·  좜처: ipython/ipython

λ¬Έμžμ—΄ λ‚΄μ˜ κ²½λ‘œμ— λŒ€ν•œ νƒ­ 완성이 λ‹€μ‹œ λŠμ–΄μ§„ 것 κ°™μŠ΅λ‹ˆλ‹€ (μ΄μ „μ—λŠ” # 10961, # 10996, λ…ΈνŠΈλΆ 문제 # 3333 λ“± λ§Žμ€ κ³³μ—μ„œ μ–ΈκΈ‰ 됨). v7.2.0 μ—μ„œ 얻은 μ •λ³΄λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

screen shot 2018-12-14 at 12 39 17 pm

v7.1.1 의 λ™μž‘κ³Ό 비ꡐ :

screen shot 2018-12-14 at 12 38 20 pm

Jediλ₯Ό λΉ„ν™œμ„±ν™” ( c.IPCompleter.use_jedi = False μ—μ„œ ipython_config.py )ν•˜λ©΄ μ˜¬λ°”λ₯Έ λ™μž‘μ„ μ œκ³΅ν•˜λ―€λ‘œ # 11503κ³Ό κ΄€λ ¨μ΄μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‹œμŠ€ν…œ 정보

{'commit_hash': '523ed2fe5',
 'commit_source': 'installation',
 'default_encoding': 'UTF-8',
 'ipython_path': '/usr/local/lib/python3.6/site-packages/IPython',
 'ipython_version': '7.2.0',
 'os_name': 'posix',
 'platform': 'Darwin-17.7.0-x86_64-i386-64bit',
 'sys_executable': '/usr/local/opt/python/bin/python3.6',
 'sys_platform': 'darwin',
 'sys_version': '3.6.5 (default, Jun 17 2018, 12:13:06) \n'
                '[GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.2)]'}

help wanted tab-completion

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

ipython == 7.1.1둜 λ‹€μš΄ κ·Έλ ˆμ΄λ“œν•˜λŠ” 것이 μ €μ—κ²Œ ν•΄κ²°μ±…μœΌλ‘œ μž‘λ™ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

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

λ‚˜λŠ” 같은 문제, ipython 7.2.0이 μžˆμŠ΅λ‹ˆλ‹€.

ipython == 7.1.1둜 λ‹€μš΄ κ·Έλ ˆμ΄λ“œν•˜λŠ” 것이 μ €μ—κ²Œ ν•΄κ²°μ±…μœΌλ‘œ μž‘λ™ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

jedi ν™œμ„±ν™”ν•˜λŠ” 것이 μ›Œν¬ ν”Œλ‘œμ— λ„μ›€μ΄λœλ‹€λ©΄ λˆ„κ΅°κ°€ 곡유 ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? κ·Έλ ‡λ‹€λ©΄ 방법을 μ•Œκ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

ν™•μ‹€νžˆ λ‚΄ 인생을 훨씬 더 νž˜λ“€κ²Œ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. 닀단계 완성도, 폴더 완성도, 셀을 μ‹€ν–‰ν•˜κΈ° 전에 μžλ™ μ™„μ„± κΈ°λŠ₯을 μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€ ( df = pd.DataFrame(); df.val<TAB> μ‹€νŒ¨).

λ²„κ·ΈλŠ” ν™•μ‹€νžˆ λ‚΄ 인생을 훨씬 더 νž˜λ“€κ²Œ λ§Œλ“€μ—ˆλ‹€.

μžλ™ 완성은 μ•„λ§ˆλ„ λŒ€ν™” ν˜• μ‰˜μ˜ κ°€μž₯ μ€‘μš”ν•œ κΈ°λŠ₯ 쀑 ν•˜λ‚˜ 일 κ²ƒμž…λ‹ˆλ‹€. μ œλ‹€μ΄μ™€ 경둜 μžλ™ 완성이 곡쑴 ν•  μˆ˜μžˆλŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ?
jedi λ˜λŠ” λ ˆκ±°μ‹œ 완성을 μ‚¬μš©ν•˜κΈ°λ‘œ κ²°μ •ν•˜λŠ” 맀우 κ°„λ‹¨ν•œ κ²½ν—˜μ  방법은 큰 도움이 될 κ²ƒμž…λ‹ˆλ‹€. λ¬Έμžμ—΄μ— 있으면 ν˜„μž¬ λ„€μž„ 슀페이슀의 이름을 μ›ν•˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€.

λ‹€μš΄ κ·Έλ ˆμ΄λ“œμ— λ¬Έμ œκ°€μžˆλŠ” μ‚¬λžŒλ“€μ—κ²ŒλŠ” @ivirshup 의 의견이 κ°€μž₯ λ„μ›€μ΄λœλ‹€λŠ” 것을 jedi μžλ™ 완성을 λΉ„ν™œμ„±ν™”ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 아직 μƒμ„±ν•˜μ§€ μ•Šμ€ 경우 λ‹€μŒμ„ μ‚¬μš©ν•˜μ—¬ ipython_config.py 을 생성 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

# Generate config
ipython profile create
# Edit config file in vim
vim .ipython/profile_default/ipython_kernel_config.py 

c.IPCompleter.use_jedi = False μ—μ„œ ipython_config.py

[μ œλ‹€μ΄ μ™„μ„± 자]λŠ” ν™•μ‹€νžˆ λ‚΄ 인생을 훨씬 더 νž˜λ“€κ²Œ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. 닀단계 완성도, 폴더 완성도, […]

μ•„λ‹ˆ, μ•„λ‹ˆ. κ·Έλ ‡κ²Œν•˜λŠ” 것은 μ œλ‹€μ΄ μ™„μ„±μžκ°€ μ•„λ‹™λ‹ˆλ‹€. μ—¬λŸ¬ μ™„μ„±μžκ°€ 있으며 μ™„μ„± 자 선택 μ½”λ“œκ°€ μ†μƒλ˜μ–΄ 잘λͺ»λœ μ™„μ„±μžκ°€ μ„ νƒλ˜μ—ˆλ‹€κ³  μ„€λͺ…ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 그리고 jediλ₯Ό ν™œμ„±ν™”ν•˜μ—¬ μ™„μ„± 자 λͺ©λ‘μ„ ν„°μΉ˜ν•˜μ—¬ ν•΄λ‹Ή 버그λ₯Ό λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€. @takluyver λŠ” https://github.com/ipython/ipython/pull/10996#issuecomment -378288569에 문제λ₯Ό μ„€λͺ…ν•©λ‹ˆλ‹€.

jediλ₯Ό λ‹€μ‹œ λΉ„ν™œμ„±ν™”ν•˜λŠ” 것은 μΌμ‹œμ μΈ ν•΄κ²° λ°©λ²•μ΄μ§€λ§Œ μ‹€μ œλ‘œ μ™„μ„± 자 선택 μ½”λ“œ (λ‚΄ 생각에 # 11064)λ₯Ό μˆ˜μ •ν•˜λŠ” 것이 훨씬 더 λ‚˜μ€ 해결책이 될 κ²ƒμž…λ‹ˆλ‹€.

λ‚΄ μ΄ν•΄λŠ” λͺ¨λ“  μ™„μ„±μžκ°€ λ™μ‹œμ— μž‘μ—…ν•˜κ³  μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. μ™„μ„±μžλŠ” μ—¬κΈ° 에 μ •μ˜λ˜λ©° λͺ¨λ‘ λ™μ‹œμ— μ‚¬μš©λ©λ‹ˆλ‹€ . matches λͺ©λ‘ (μžλ™ μ™„μ„±μ˜ κ²°κ³Ό)μ—λŠ” λͺ¨λ“  μ™„μ„± 자 결과의 연결이 ν¬ν•¨λ˜λ©° file_matches μ™„μ„±μžλŠ” μ—¬μ „νžˆ κ·Έ μΌλΆ€μž…λ‹ˆλ‹€.

λ”°λΌμ„œ jediκ°€ ν™œμ„±ν™”λ˜μ–΄μžˆμ„ λ•Œ 경둜 / 파일 이름 완성이 "깨지지"μ•ŠλŠ” 것은 단지 λ„ˆλ¬΄ λ§Žμ€ κ²°κ³Ό (jediμ—μ„œ 온)κ°€μžˆμ–΄μ„œ 더 이상 μΌμΉ˜ν•˜λŠ” 파일 경둜λ₯Ό λ³Ό 수 μ—†λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

μˆ˜μ •μ— λŒ€ν•œ 첫 번째 μ•„μ΄λ””μ–΄λŠ” λ¬Έμžμ—΄μ„ μž…λ ₯ ν•  λ•Œ jedi μžλ™ 완성을 λΉ„ν™œμ„±ν™”ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μž‘λ™ν• κΉŒμš”?
μž‘λ™ν•˜μ§€ μ•ŠλŠ” μœ μΌν•œ 것은 eval λ˜λŠ” exec μ½”λ“œλ₯Ό μ‹€ν–‰ν•  λ•Œ μžλ™ μ™„μ„±μ΄μ§€λ§Œ λͺ¨λ“  단일 μ‚¬μš© 사둀λ₯Ό μˆ˜μ •ν•  μˆ˜λŠ” μ—†λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 그리고 μ–΄λ–€ μ‚¬λžŒλ“€μ€ 파일 경둜 μžλ™ 완성을 μ’‹μ•„ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

νŽΈμ§‘ : @ flying-sheep # 11064에 μ—°κ²°λœ λ‹€λ₯Έ 문제λ₯Ό 읽으면 λ¬Έμžμ—΄μ„ μž…λ ₯ ν•  λ•Œ jediλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 논리가 이미 μžˆλ‹€λŠ” 것을 μ΄ν•΄ν•˜μ§€λ§Œ κΉ¨μ‘ŒμŠ΅λ‹ˆλ‹€.

λ‚΄κ°€ λ§ν•˜λŠ” 것을 μ„€λͺ…ν•˜κΈ° μœ„ν•΄. 두 슀크린 μƒ· λͺ¨λ‘ jediλ₯Ό μ‚¬μš©ν•˜μ—¬ 찍은 κ²ƒμž…λ‹ˆλ‹€. 경둜 μžλ™ 완성이 μ—¬μ „νžˆ μž‘λ™ν•˜λŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. 더 λ§Žμ€ 일치 ν•­λͺ©μ΄ μžˆμœΌλ―€λ‘œ 쑰금 더 μž…λ ₯ν•˜λ©΄λ©λ‹ˆλ‹€.
test1
test2

그것은 일반적으둜 λ‚΄ λ¬Έμ œμž…λ‹ˆλ‹€. 쑰금만 μž…λ ₯ν•˜λ©΄ λ„μ›€μ΄λ˜μ§€λ§Œ 파일의 첫 κΈ€μžλ₯Ό λͺ¨λ₯΄λŠ” 경우 항상 μ˜΅μ…˜μ€ μ•„λ‹™λ‹ˆλ‹€. 경둜λ₯Ό λͺ…ν™•ν•˜κ²Œ μž…λ ₯ν•˜κΈ° μ‹œμž‘ ν–ˆλ”λΌλ„ 각 "/"후에 μ™„μ„±μžλŠ” abs (), all () 및 기타 λ‚΄μž₯ κΈ°λŠ₯을 ν‘œμ‹œν•˜λŠ” κΈ°λ³Έ λͺ¨λ“œλ‘œ "μž¬μ„€μ •"λ©λ‹ˆλ‹€.
image

λͺ‡ 개의 쀑첩 ν΄λ”κ°€μžˆλŠ” κΈ΄ κ²½λ‘œκ°€μžˆλŠ” 경우 큰 λ¬Έμ œμž…λ‹ˆλ‹€. Bash μžλ™ 완성은 "νƒ­"에 ν•­λͺ©μ„ μΆ”κ°€ν•©λ‹ˆλ‹€. ν˜„μž¬ ipython μžλ™ μ™„μ„± κΈ°λŠ₯을 μ‚¬μš©ν•˜λ €λ©΄ 첫 κΈ€μž λ˜λŠ” 각 폴더 / 파일의 λͺ‡ 개λ₯Ό κΈ°μ–΅ν•˜κ³  μž…λ ₯ ν•œ λ‹€μŒ 파일 / 폴더λ₯Ό μ°ΎκΈ° 전에 λͺ‡ 가지 λ‚΄μž₯ κΈ°λŠ₯을 μ‚΄νŽ΄ λ΄μ•Όν•©λ‹ˆλ‹€.

μžλ™ μ™„μ„±μ—μ„œ λͺ¨λ“  λ‚΄μž₯ κΈ°λŠ₯κ³Ό λͺ¨λ“  ipython λ§ˆλ²•μ„ μ œκ±°ν•˜λŠ” 방법이 μžˆλ‹€λ©΄ 이미 훨씬 더 쒋을 κ²ƒμž…λ‹ˆλ‹€!

λ‚˜λŠ” 'abs'λ₯Ό μž…λ ₯ν•˜λŠ” 방법을 μ•Œκ³  있으며, 우리 λŒ€λΆ€λΆ„μ€ μžλ™ μ™„μ„± λͺ©λ‘μ—μ„œ μ„ νƒν•˜λŠ” 것보닀 λͺ‡ λ°° 더 λΉ λ₯΄κ²Œ μž…λ ₯ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 그것에 λŒ€ν•œ 쒋은 μ΄μœ κ°€ μžˆλŠ”μ§€, 그리고 λ‹€λ₯Έ 3-4 κΈ€μžμ˜ κΈ΄ λ‚΄μž₯이 μ²˜μŒμ— 거기에 μžˆμ„μ§€ ν™•μ‹ ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€! μ΄μƒμ μœΌλ‘œλŠ” λ‚΄μž₯ λͺ©λ‘μ„ νŽΈμ§‘ν•˜λŠ” 방법이 μžˆλ‹€λ©΄ DepercationWarningκ³Ό 같이 λ‚΄κ°€ μ‚¬μš©ν•˜λŠ” κΈ΄ 이름 λͺ‡ 개만 남겨두고 λ‚˜λ¨Έμ§€λŠ” λͺ¨λ‘ μ œκ±°ν•©λ‹ˆλ‹€.

μ΄λ―Έμ§€μ˜ μ‚¬μš© 사둀λ₯Όλ³΄μ‹­μ‹œμ˜€. λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄ μ•ˆμ— Python 객체 이름을 μž…λ ₯ν•΄μ•Όν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

κ°„λ‹¨ν•œ μ‚¬μš© 사둀λ₯Ό 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.

exec("print(abs(-3))", [globals()])

덜 일반적인 μ‚¬μš© 사둀 일 μˆ˜λ„ μžˆμ§€λ§Œ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ μ‚¬μš©μžμ—κ²Œ 경둜 완성이이 μ‚¬μš© 사둀보닀 더 μ€‘μš”ν•˜λ‹€λŠ” 데 λ™μ˜ν•©λ‹ˆλ‹€.

λ„€, κ°€λŠ₯성이 있고 μ–΄λ–€ μ‚¬λžŒλ“€μ€ exec에 많이 μ˜μ‘΄ν•©λ‹ˆλ‹€.

μ΄μƒμ μœΌλ‘œλŠ” μžλ™ 완성이 파일 이름 λͺ¨λ“œμ— μžˆμŒμ„ κ°μ§€ν•˜κ³  κ±°κΈ°μ—μ„œ 일반 bash νƒ­ μ™„μ„±κ³Ό 같은 κΈ°λŠ₯을 μˆ˜ν–‰ν•©λ‹ˆλ‹€. 쒋은 ν”„λ‘μ‹œλŠ” "/", "./"λ˜λŠ” "C :" "D :"λ“±μœΌλ‘œ μ‹œμž‘ν•©λ‹ˆλ‹€.

μ΄λŸ¬ν•œ λ³€μˆ˜λ‘œ μ‹œμž‘ν•˜λŠ” λ¬Έμžμ—΄μ— μœ νš¨ν•œ 파이썬 ν‘œν˜„μ‹μ΄ 포함될 κ°€λŠ₯성은 훨씬 μ μŠ΅λ‹ˆλ‹€.

a = "C:print(abs(-3))"; exec(a[2:]) 의 예λ₯Όλ“€ 수 μžˆλ‹€κ³  ν™•μ‹ ν•˜μ§€λ§Œ 그럴 κ°€λŠ₯성은 거의 μ—†μŠ΅λ‹ˆλ‹€.

예, μ‹€μ œλ‘œ μ½”λ“œλŠ” λ¬Έμžμ—΄μ„ μž…λ ₯ ν•  λ•Œ jedi 완성을 κ±΄λ„ˆ λ›°λ„λ‘λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒ 쀄을 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€ : https://github.com/ipython/ipython/blob/65778adec13a65f82c5d2bab123e7a63516702c8/IPython/core/completer.py#L1375
그리고 그것은 μš°λ¦¬κ°€ λ¬Έμžμ—΄μ— μžˆλŠ”μ§€ μ—¬λΆ€λ₯Ό νŒŒμ•…ν•˜κΈ° μœ„ν•΄ jedi λ‚΄λΆ€ νŒŒμ‹± 논리에 μ˜μ‘΄ν•©λ‹ˆλ‹€.
이 μ½”λ“œλ₯Ό μ•½κ°„ ν…ŒμŠ€νŠΈ ν•œ κ²°κ³Ό μ•½κ°„ κ³ μž₯λ‚œ κ²ƒμœΌλ‘œ λ‚˜νƒ€λ‚¬μŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ path = " μž…λ ₯ν•˜λ©΄ path = "./ μ•„λ‹Œ λ¬Έμžμ—΄μ— μžˆμŒμ„ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. tokenizeλ₯Ό μ‚¬μš©ν•˜μ—¬ 더 λ‚˜μ€ μ†”λ£¨μ…˜μ„ 찾을 수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

Jediκ°€ ErrorLeaf라고 μƒκ°ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμž…λ‹ˆκΉŒ, μ•„λ‹ˆλ©΄ 두 λ…Έλ“œλ‘œ λŒμ•„κ°€λŠ” 것이 λΆˆμΆ©λΆ„ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆκΉŒ?

ν™•μ‹€ν•˜μ§€ μ•ŠμœΌλ©° λ‚΄λΆ€ μ œλ‹€μ΄ (개인 API)에 μ˜μ‘΄ν•œλ‹€λŠ” 사싀이 λ§ˆμŒμ— 듀지 μ•Šμ•˜κΈ° λ•Œλ¬Έμ— μ‹ μ†ν•˜κ²Œ tokenize λ§ˆμŒμ„ μ „ν™˜ν–ˆμŠ΅λ‹ˆλ‹€.

tokenize에도 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμžμ—΄μ„ μ—΄κΈ° 전에 μ…€μ—μ„œ IndentationError λ˜λŠ” SyntaxErrorκ°€ λ°œμƒν•˜λ©΄ μ–΄λ–»κ²Œλ©λ‹ˆκΉŒ?

μ μ§„μ μœΌλ‘œ 쀄을 μ—­ 좔적해야 ν•  μˆ˜λ„ μžˆμ§€λ§Œ λΆˆμ™„μ „ν•œ λ¬Έμžμ—΄ μ„ μ–ΈμœΌλ‘œ 인해 항상 μ»€μ„œ κ·Όμ²˜μ—μ„œ 였λ₯˜κ°€ λ°œμƒν•  κ²ƒμœΌλ‘œ μ˜ˆμƒν•©λ‹ˆκΉŒ?

tokenizeλ₯Ό μ‚¬μš©ν•˜λ©΄ inputtransformer2.py μ—μ„œ μˆ˜ν–‰λ˜λŠ” 것과 같은 κ°„λ‹¨ν•œ 논리λ₯Ό μƒκ°ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ‚¬μš©μžκ°€ 터미널에 λͺ©λ‘μ΄λ‚˜ 사전을 μž…λ ₯ν•˜κ³  μžˆλŠ”μ§€ μ•„λŠ” 논리가 μžˆμœΌλ―€λ‘œ enter λ₯Ό λˆ„λ₯Ό λ•Œ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜μ§€ μ•Šκ³  μƒˆ 쀄을 μΆ”κ°€ν•©λ‹ˆλ‹€.
test1
test2
" 및 ' 문자둜 λ™λ“±ν•œ 것을 μ‹œλ„ν•΄ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€ (PR을 생각해 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€).

λ˜ν•œ 또 λ‹€λ₯Έ μ•„μ΄λ””μ–΄λŠ” regexpλ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.이 κ²½μš°μ—λŠ” μ“Έλͺ¨κ°€ μ—†μŠ΅λ‹ˆλ‹€.

tokenize에도 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 셀이 λ¬Έμžμ—΄μ„ μ—΄κΈ° 전에 IndentationError λ˜λŠ” SyntaxErrorλ₯Ό λ°œμƒ μ‹œν‚€λ©΄ μ–΄λ–»κ²Œ λ κΉŒμš”?

μ™„λ£Œλ˜μ§€ μ•Šμ„ 것 κ°™λ„€μš” ... ν˜„μž¬ 행동은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? μ½”λ“œμ— SyntaxErrorκ°€ μžˆμ–΄λ„ μžλ™ 완성이 계속 μž‘λ™ν•©λ‹ˆκΉŒ? μš°λ¦¬λŠ” 확인해야

7.3.0으둜 μ—…λ°μ΄νŠΈ ν•œ 후에도 λ™μΌν•œ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€.

예, SyntaxErrorκ°€μžˆμ„ λ•Œ μž‘λ™ν•©λ‹ˆλ‹€.

Screenshot from 2019-03-28 10-48-20

IIRC tokenize λŠ” ꡬ문 였λ₯˜μ— λŒ€ν•΄ μƒλ‹Ήνžˆ κ°•λ ₯ν•©λ‹ˆλ‹€. ν‘œμ‹œν•˜λŠ” 슀 λ‹ˆνŽ«μ˜ μ’…λ₯˜λŠ” μ—¬μ „νžˆ 잘 토큰 ν™” 될 수 있으며 토큰을 μ΄ν•΄ν•˜λ €κ³  ν•  λ•Œλ§Œ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

토큰 ν™” μˆ˜μ€€μ—μ„œ ꡬ문 였λ₯˜ 일 μˆ˜μžˆλŠ” 이전 μ€„μ˜ μ’…κ²°λ˜μ§€ μ•Šμ€ λ¬Έμžμ—΄κ³Ό 같은 μž‘μ—…μ„ μˆ˜ν–‰ ν•  수 μžˆλŠ”μ§€ 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

μ΅œμ‹  conda μ„€μΉ˜μ™€ μœ μ‚¬ν•œ 문제 :

python                    3.7.3
ipykernel                 5.1.0              
ipython                   7.4.0           

μ‹€μ œλ‘œ νƒ­ 완성이 μ „ν˜€ μ—†μŠ΅λ‹ˆλ‹€ . ν•¨μˆ˜ λ‚΄μ—μ„œλ§Œ (shift + double-tab) 독 슀트링 완성을 μ–»μŠ΅λ‹ˆλ‹€. 객체에 λŒ€ν•œ λ©”μ†Œλ“œ μ™„λ£Œκ°€ μ „ν˜€ μ—†μŠ΅λ‹ˆλ‹€. λ¬Έμžμ—΄ λ‚΄μ˜ 경둜 μž…λ ₯은 μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€. 즉, μ „μ—­ λ³€μˆ˜κ°€ λ‚˜μ—΄λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

condaλ₯Ό 톡해 μ„€μΉ˜λœ IPython 7.7.0에 λ¬Έμ œκ°€ 남아 μžˆμŠ΅λ‹ˆλ‹€.

ipython                   7.7.0            py37h5ca1d4c_0    conda-forge
ipython_genutils          0.2.0                      py_1    conda-forge
jedi                      0.14.1                   py37_0    conda-forge
python                    3.7.3                h33d41f4_1    conda-forge

이 λ¬Έμ œμ™€ # 10926이 μ’…λ£Œ 될 λ•ŒκΉŒμ§€ κ³„μ†λ©λ‹ˆλ‹€. @ JeremySikes73 κ³Ό λ‚˜λŠ” 거기에 무엇이 잘λͺ»λ˜μ—ˆλŠ”지 μ„€λͺ…ν–ˆκ³ , λ¬Έμ œκ°€ λ™μΌν•˜λ‹€κ³  ν™•μ‹ ν•©λ‹ˆλ‹€ .IPython의 λ§€μ²˜λŠ” λͺ¨λ‘ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λŠ” 반면 a) κ΄€λ ¨ 맀처 만 μ‹€ν–‰ν•˜κ±°λ‚˜ b) λ§Œλ“œλŠ” λ§€μ²˜μ— μ½”λ“œλ₯Ό μΆ”κ°€ν•΄μ•Όν•©λ‹ˆλ‹€. κ²°κ³Όκ°€ 관련이 없을 λ•Œ 아무것도 λ°˜ν™˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

도와 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.ν•˜μ§€λ§Œ # 10926을 읽고 μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³΄κ³  "아직 λ¬Έμ œμž…λ‹ˆλ‹€"라고 λ§ν•˜λŠ” 것보닀 상황을 κ°œμ„ ν•˜λŠ” 방법을 μ°ΎλŠ” 것이 더 생산적이라고 μƒκ°ν•©λ‹ˆλ‹€.

@meeseeksdev νƒœκ·Έ 도움말 ꡬ함

@meeseeksdev νƒœκ·Έ νƒ­ μ™„μ„±

λ‹€μš΄ κ·Έλ ˆμ΄λ“œμ— λ¬Έμ œκ°€μžˆλŠ” μ‚¬λžŒλ“€μ—κ²ŒλŠ” @ivirshup 의 의견이 κ°€μž₯ λ„μ›€μ΄λœλ‹€λŠ” 것을 jedi μžλ™ 완성을 λΉ„ν™œμ„±ν™”ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 아직 μƒμ„±ν•˜μ§€ μ•Šμ€ 경우 λ‹€μŒμ„ μ‚¬μš©ν•˜μ—¬ ipython_config.py 을 생성 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

# Generate config
ipython profile create
# Edit config file in vim
vim .ipython/profile_default/ipython_kernel_config.py 

c.IPCompleter.use_jedi = False μ—μ„œ ipython_config.py

νŽΈμ§‘ ν•  νŒŒμΌμ€ λ¬΄μ—‡μž…λ‹ˆκΉŒ? ipython_kernel_config.py λ˜λŠ” ipython_config.py ?

이 λ¬Έμ œμ— λŒ€ν•œ μž„μ‹œ ν•΄κ²° 방법은 탭을 λˆ„λ₯Έ ν›„ 두 번째 μŠ¬λž˜μ‹œλ₯Ό μΆ”κ°€ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

'/<TAB> μž…λ ₯ ν›„
image

/ μž…λ ₯ ν›„
image

ν•­λͺ©μ΄ μ„ νƒλ˜λ©΄ κ΅¬λΆ„μžλ‘œ 단일 μŠ¬λž˜μ‹œ 만 ν‘œμ‹œλ©λ‹ˆλ‹€.

Return을 λˆ„λ₯Έ ν›„
image

νƒ­ 을 λˆ„λ₯΄κΈ°

였늘 (7.11.0) ν˜„μž¬ μ΅œμ‹  λ²„μ „μ˜ ipython으둜 μ—…κ·Έλ ˆμ΄λ“œν–ˆλŠ”λ° λ¬Έμ œκ°€ μ—¬μ „νžˆ μ§€μ†λ©λ‹ˆλ‹€.

@ flying-sheep @augustogoulart 이것에 λŒ€ν•œ μš”μ²­μ„ ν’€ 수 μžˆμŠ΅λ‹ˆκΉŒ? (즉, "helpwanted"νƒœκ·ΈλŠ” κ·Έλ ‡κ²Œ μ œμ•ˆν•˜μ§€λ§Œ, μ €λŠ” κΈ°μ‘΄ κΈ°μ—¬μžκ°€ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— μ—¬κΈ°μ—μ„œ 개발자 κ·œλ²”μ„ ν™•μ‹  ν•  수 μ—†μŠ΅λ‹ˆλ‹€.) λ¬Έμžμ—΄μ— μžˆλŠ”μ§€ μ—¬λΆ€λ₯Ό κ°μ§€ν•˜λŠ” 논리에 μ•½κ°„μ˜ 변경이 μžˆμŠ΅λ‹ˆλ‹€. , μ™„λ²½ν•œ μˆ˜μ •μ€ μ•„λ‹ˆμ§€λ§Œ 적어도 μ œλ‹€μ΄λ₯Ό λ„λŠ” 것이 더 μ’‹μŠ΅λ‹ˆλ‹€.

이것은 λ„λŠ” 것이 쒋을 것이기 λ•Œλ¬Έμ— # 10926 λ˜λŠ” 이것을 μ™„μ „νžˆ κ³ μΉ˜λŠ” 것은 μ•„λ‹™λ‹ˆλ‹€ (λ‚΄ μ˜κ²¬μœΌλ‘œλŠ”) :

  • 사전 ν‚€ λ¬Έμžμ—΄μ—μ„œ 파일 μ™„μ„± 일치
  • μž„μ˜μ˜ λ¬Έμžμ—΄μ—μ„œ 맀직 μ™„μ„± 일치

κ·ΈλŸ¬λ‚˜ 그것은 적어도 λ¬Έμžμ—΄μ—μ„œ μ œλ‹€μ΄λ₯Ό λ„λŠ”λ°, 이것은 λ‚΄ μžμ‹ μ˜ μ‚¬μš© νŒ¨ν„΄μ„ μ‹€ν–‰ κ°€λŠ₯ν•˜κ²Œ λ§Œλ“œλŠ” 데 큰 λ„μ›€μ΄λ©λ‹ˆλ‹€.

λ‚˜λŠ” λ‚˜ μžμ‹ μ΄ μž‘μ€ κΈ°μ—¬μž μΌλΏμž…λ‹ˆλ‹€.

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