λ¬Έμμ΄ λ΄μ κ²½λ‘μ λν ν μμ±μ΄ λ€μ λμ΄μ§ κ² κ°μ΅λλ€ (μ΄μ μλ # 10961, # 10996, λ
ΈνΈλΆ λ¬Έμ # 3333 λ± λ§μ κ³³μμ μΈκΈ λ¨). v7.2.0
μμ μ»μ μ 보λ λ€μκ³Ό κ°μ΅λλ€.
v7.1.1
μ λμκ³Ό λΉκ΅ :
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)]'}
λλ κ°μ λ¬Έμ , 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λ₯Ό μ¬μ©νμ¬ μ°μ κ²μ
λλ€. κ²½λ‘ μλ μμ±μ΄ μ¬μ ν μλνλ κ²μ μ μ μμ΅λλ€. λ λ§μ μΌμΉ νλͺ©μ΄ μμΌλ―λ‘ μ‘°κΈ λ μ
λ ₯νλ©΄λ©λλ€.
κ·Έκ²μ μΌλ°μ μΌλ‘ λ΄ λ¬Έμ μ
λλ€. μ‘°κΈλ§ μ
λ ₯νλ©΄ λμμ΄λμ§λ§ νμΌμ 첫 κΈμλ₯Ό λͺ¨λ₯΄λ κ²½μ° νμ μ΅μ
μ μλλλ€. κ²½λ‘λ₯Ό λͺ
ννκ² μ
λ ₯νκΈ° μμ νλλΌλ κ° "/"νμ μμ±μλ abs (), all () λ° κΈ°ν λ΄μ₯ κΈ°λ₯μ νμνλ κΈ°λ³Έ λͺ¨λλ‘ "μ¬μ€μ "λ©λλ€.
λͺ κ°μ μ€μ²© ν΄λκ°μλ κΈ΄ κ²½λ‘κ°μλ κ²½μ° ν° λ¬Έμ μ λλ€. 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
λ₯Ό λλ₯Ό λ μ½λλ₯Ό μ€ννμ§ μκ³ μ μ€μ μΆκ°ν©λλ€.
"
λ° '
λ¬Έμλ‘ λλ±ν κ²μ μλν΄ λ³Ό μ μμ΅λλ€ (PRμ μκ°ν΄ λ³Ό μ μμ΅λλ€).
λν λ λ€λ₯Έ μμ΄λμ΄λ regexpλ₯Ό μ¬μ©νλ κ²μ λλ€.μ΄ κ²½μ°μλ μΈλͺ¨κ° μμ΅λλ€.
tokenizeμλ λ¬Έμ κ° μμ΅λλ€. μ μ΄ λ¬Έμμ΄μ μ΄κΈ° μ μ IndentationError λλ SyntaxErrorλ₯Ό λ°μ μν€λ©΄ μ΄λ»κ² λ κΉμ?
μλ£λμ§ μμ κ² κ°λ€μ ... νμ¬ νλμ 무μμ λκΉ? μ½λμ SyntaxErrorκ° μμ΄λ μλ μμ±μ΄ κ³μ μλν©λκΉ? μ°λ¦¬λ νμΈν΄μΌ
7.3.0μΌλ‘ μ λ°μ΄νΈ ν νμλ λμΌν λ¬Έμ κ° λ°μν©λλ€.
μ, SyntaxErrorκ°μμ λ μλν©λλ€.
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>
μ
λ ₯ ν
/
μ
λ ₯ ν
νλͺ©μ΄ μ νλλ©΄ ꡬλΆμλ‘ λ¨μΌ μ¬λμ λ§ νμλ©λλ€.
Returnμ λλ₯Έ ν
ν μ λλ₯΄κΈ°
μ€λ (7.11.0) νμ¬ μ΅μ λ²μ μ ipythonμΌλ‘ μ κ·Έλ μ΄λνλλ° λ¬Έμ κ° μ¬μ ν μ§μλ©λλ€.
@ flying-sheep @augustogoulart μ΄κ²μ λν μμ²μ ν μ μμ΅λκΉ? (μ¦, "helpwanted"νκ·Έλ κ·Έλ κ² μ μνμ§λ§, μ λ κΈ°μ‘΄ κΈ°μ¬μκ° μλκΈ° λλ¬Έμ μ¬κΈ°μμ κ°λ°μ κ·λ²μ νμ ν μ μμ΅λλ€.) λ¬Έμμ΄μ μλμ§ μ¬λΆλ₯Ό κ°μ§νλ λ Όλ¦¬μ μ½κ°μ λ³κ²½μ΄ μμ΅λλ€. , μλ²½ν μμ μ μλμ§λ§ μ μ΄λ μ λ€μ΄λ₯Ό λλ κ²μ΄ λ μ’μ΅λλ€.
μ΄κ²μ λλ κ²μ΄ μ’μ κ²μ΄κΈ° λλ¬Έμ # 10926 λλ μ΄κ²μ μμ ν κ³ μΉλ κ²μ μλλλ€ (λ΄ μ견μΌλ‘λ) :
κ·Έλ¬λ κ·Έκ²μ μ μ΄λ λ¬Έμμ΄μμ μ λ€μ΄λ₯Ό λλλ°, μ΄κ²μ λ΄ μμ μ μ¬μ© ν¨ν΄μ μ€ν κ°λ₯νκ² λ§λλ λ° ν° λμμ΄λ©λλ€.
λλ λ μμ μ΄ μμ κΈ°μ¬μ μΌλΏμ λλ€.
κ°μ₯ μ μ©ν λκΈ
ipython == 7.1.1λ‘ λ€μ΄ κ·Έλ μ΄λνλ κ²μ΄ μ μκ² ν΄κ²°μ± μΌλ‘ μλνλ κ² κ°μ΅λλ€.