Ipython: Ipython рдореЗрдВ рдорд▓реНрдЯреА-рд▓рд╛рдЗрди рдХреЛрдб рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 27 рд╕рд┐рддре░ 2018  ┬╖  26рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: ipython/ipython

рдореИрдВрдиреЗ рдЖрдЬ рдПрдХ рдХрдХреНрд╖рд╛ рдХреЛ рдкрдврд╝рд╛рддреЗ рд╕рдордп рдПрдХ pip install ipython рдФрд░ рдПрдХ if рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдФрд░ рдлрд┐рд░ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдФрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдПрдВрдЯреНрд░реА рдорд╛рд░рд╛ред

рдпрд╣ рдПрдХ рдмрдЧ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдПрдХ pip install ipython==6.5.0 рдФрд░ рдХреЛрдб рдмреНрд▓реЙрдХ рдореЗрдВ рджрд░реНрдЬ рдХрд░реЗрдВ рдареАрдХ рд╕реЗ рдореБрдЭреЗ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓реА рдЗрдВрдбреЗрдВрдЯреЗрдб рд▓рд╛рдЗрди рджрд┐рдЦрд╛рдИред

рдореИрдВ Ubuntu рдкрд░ рд╣реВрдБ 18.04 tmux рдХреЗ рднреАрддрд░ ipython рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ tmux рдпрд╣рд╛рдБ рдореБрджреНрджрд╛ рд╣реИред

Hacktoberfest help wanted

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рджрд░рдЕрд╕рд▓, рдореБрдЭреЗ рдЕрдкрдиреЗ рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд░рд┐рдЧреНрд░реЗрд╢рди рдорд┐рд▓рд╛ред рдЕрдм рдЗрд╕реЗ рдареАрдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

PR # 11354 рдЕрдм рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╕рднреА 26 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЖрдк рдПрдХ рдирдИ рд▓рд╛рдЗрди рдХреЛ рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ctrl-o рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВрдиреЗ рдХрднреА рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдПрдХред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг / рд╣рд╛рде рд╕реЗ рд╡рд╛рд░рдВрдЯ рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рд╣рд░ рдЙрд╕ рд╢реЙрд░реНрдЯрдХрдЯ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рдерд╛ рдФрд░ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдордЬрдмреВрд░ рдХрд░ рд░рд╣рд╛ рдерд╛ред

рдореИрдВ рд▓рд╛рдЗрд╡ рдСрдбрд┐рдпрдВрд╕ рдХреЛ рдкрдврд╝рд╛рддреЗ рд╕рдордп REPL рдореЗрдВ рдорд▓реНрдЯреА-рд▓рд╛рдЗрди рдмреНрд▓реЙрдХ рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП IPython рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдореЗрд░реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рдорд╛рди рдореБрджреНрджреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ Ctrl-O рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБ-рдкрдВрдХреНрддрд┐ рдХреЛрдб рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреБрдХреНрдд рдЬрдЧрд╣ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдпрд╣ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдЧ рд╣реИ, рдореИрдВ рдЖрдкрдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрджрд┐ рдЖрдк 7.x рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕ рдмреАрдЪ рдореЗрдВ Ctrl-O рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрд╣ рдорд╣рд╛рди! рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдмрдЧ рдерд╛ред рдзрдиреНрдпрд╡рд╛рдж @Carreau! ЁЯШД

рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг (рдХрд╛рдо рдФрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдиреЗ) рджреЗрдВрдЧреЗ рдЬреЛ рдЖрдк рддрдп рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЖрдк рдлрд╝рд┐рдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХреЗрдВ?

рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рд╣реИ рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдХреБрдЫ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдФрд░ рдЖрдкрдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред

with open('hello.txt', mode='wt') as my_file:
    my_file.write('hi')
    my_file.write('hi again')

рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдпрд╛рдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рди рдХрдИ рдЫреЛрд░реЛрдВ:

numbers = [2, 1, 3, 4, 7, 8, 11]

for n in numbers:
    if n > 0:
        print(n*2)
    else:
        print(n/2)

@Carreau рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ? рдореБрдЭреЗ рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА

рд╣рд╛рдп @ рдбреЗрдмреЛрд░рд╛-рдбрд┐рдЧреНрдЧреНрд╕, рдореИрдВ рдПрдХ рддреНрд╡рд░рд┐рдд рдирдЬрд╝рд░ рдЖрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм рддрдХ рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВред

рдореИрдВрдиреЗ рдкреБрд░рд╛рдиреЗ input_splitter рдФрд░ рдирдП input_transformer рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЫреЛрдЯрд╛ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓рд╛ рд▓рд┐рдЦрд╛ рд╣реИ:

from IPython.core import inputtransformer2 as ipt2 # new way
from IPython.core import inputsplitter #oldl way

occ =  inputsplitter.InputSplitter().check_complete
cc = ipt2.TransformerManager().check_complete

comp = lambda x : (cc(x), occ(x), x)
print(comp('if'))
print(comp('if\n\n'))
print(comp("""
def foo():
    print('Hello')"""
))
print(comp('if True:'))

рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк

(('invalid', None), ('invalid', None), 'if')
(('complete', None), ('invalid', None), 'if\n\n')
(('complete', None), ('incomplete', 4), "\ndef foo():\n    print('Hello')")
(('incomplete', 4), ('incomplete', 4), 'if True:')

рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ 3 рдЖрдЗрдЯрдо рд╡рд╣ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд░реВрдЪрд┐ рджреЗрддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рдпрд╣ рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╕реЗ рдмрд╛рд╣рд░ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ IPython рдХреЗ "рдлреАрдЪрд░" рдореЗрдВ рд╕реЗ рдПрдХ 2 рд╕реЗ рдЕрдзрд┐рдХ рдиреНрдпреВрд▓рд╛рдЗрдиреНрд╕ рд╣реЛрдиреЗ рдкрд░ рдмрд▓-рдирд┐рд╖реНрдкрд╛рджрди рдХрд░рдирд╛ рд╣реИред

рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдб рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ shortcut.py:L109-L127 рдореЗрдВ рд╣реИ ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рднреВрдорд┐рдХрд╛ рдХреЗ рдмреАрдЪ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рднреНрд░рдо рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдб рдХрд╛ рдПрдХ рдЪреЗрдХ "рдкреВрд░реНрдг" рд╣реИ, рдпрд╛ рд╣рдореЗрдВ "рдирдИ рдкрдВрдХреНрддрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдпрд╛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП"ред

рдореИрдВ _guessing_ рд╣реВрдВ рдХрд┐ рд╡рд╣ рдЕрдиреБрдорд╛рдиреА рдЬреЛ рдпрд╣ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдЗрдирдкреБрдЯ рдорд▓реНрдЯреАрд▓рд╛рдЗрди рд╣реИ рдФрд░ рдХреНрдпрд╛ рдЕрдВрддрд┐рдо рд╡рд░реНрдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдирдИ рд▓рд╛рдЗрди рд╣реИ рдпрд╛ рдирд╣реАрдВред

рд╢реЗрд╖ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдЙрд╕ рд╕реБрдзрд╛рд░ рдХреЛ рдХрд╣рд╛рдБ рд░рдЦрд╛ рдЬрд╛рдП?

  • shortcut.py ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рдЯрд░реНрдорд┐рдирд▓ IPython рдХреЛ рдареАрдХ рдХрд░реЗрдЧрд╛
  • input_transformer2 рдореЗрдВ? Ithink рдХрд┐ рдЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╛рд╡рдирд╛ рднреА QtConsole рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк рдХрдо рд╕реЗ рдХрдо рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж !

рд╣рд╛рдп @Carreau ! рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдФрд░ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

рдореИрдВ рдЗрд╕реЗ ipython рдХреЗ рджреЗрд╡ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рдФрд░ рдЕрдм shortcut.py рдФрд░ inputtransformer рдХреЗ рд▓рд┐рдП рдХреЛрдб рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджреВрдВрдЧрд╛ред

рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг (рдХрд╛рдо рдФрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдиреЗ) рджреЗрдВрдЧреЗ рдЬреЛ рдЖрдк рддрдп рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЖрдк рдлрд╝рд┐рдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХреЗрдВ?

рдЖрдкрдХреЛ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдмрдЧ рдмрд╣реБрдд рдкреНрд░рдЬрдирди рдпреЛрдЧреНрдп рддрд░реАрдХреЗ рд╕реЗ рд╣реЛрддрд╛ рд╣реИред
рдмрд╣реБрдкрдВрдХреНрддрд┐ рдкреЗрдЯ рдХреЗ рд╕рд╛рде рд╣реА рдЕрдЧрд░ рд▓рд╛рдЗрди рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд▓рд╛рдЗрди рдХреЗ рдЕрдВрдд рдореЗрдВ рдХреЛрдИ рдХреЛрд▓рди рдирд╣реАрдВ рд╣реИ рддреЛ iPython рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рддреБрдЪреНрдЫ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА рднреА iPython рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдореИрдВ рдпрд╣рд╛рдВ рдереЛрдбрд╝рд╛ рдЖрд╢рд╛рд╡рд╛рджреА рд╣реВрдВ;)

iPython

рдКрдкрд░реА рдорд╛рдорд▓рд╛ рдореИрдВ рдХреГрдкрдпрд╛, рд╣рдо рд╕реЗрдм рдХреЗ рд╕рд╛рде рдкрд░реЗрд╢рд╛рдиреА рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЖрдкрдХреЛ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ

рдЦреИрд░, рдирд╣реАрдВ, рдореИрдВ _need_ рдирд╣реАрдВ рдХрд░рддрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдХрдИ рдЙрджрд╛рд╣рд░рдг рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВ рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдИ рдорд╛рдорд▓реЗ рд╣реЛрдиреЗ рд╕реЗ рдореБрдЭреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рдХрд┐рдирд╛рд░реЗ рдХрд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реВрдВред рдореЗрд░реЗ рдкрд╛рд╕ IPython рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкрдХреНрд╖рдкрд╛рддреА рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдиреНрдп рд╕реЗ рдЙрджрд╛рд╣рд░рдг рд╕рд╣рд╛рдпрдХ рд╣реИрдВред

iPython
рдКрдкрд░реА рдорд╛рдорд▓рд╛ рдореИрдВ рдХреГрдкрдпрд╛, рд╣рдо рд╕реЗрдм рдХреЗ рд╕рд╛рде рдкрд░реЗрд╢рд╛рдиреА рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдХрдо рд╕реЗ рдХрдо рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдирд╛рдо рдореЗрдВ рдКрдкрд░реА рдореИрдВ рдХреНрдпреЛрдВ рдерд╛, рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЦреЗрдж :)

рдорд╛рдлреА рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣рд╛рдВ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз # 11354 рд╣реИ рдЬреЛ рдЗрд╕ (рдкреНрд░рдореБрдЦ) рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред IMHO рдпрд╣ IPython рдХреЗ рд▓рд┐рдП рдПрдХ рдмреНрд▓реЙрдХрд┐рдВрдЧ рдмрдЧ рд╣реИ, рдЖрдкрдХреЛ рдЬрд▓реНрдж рд╣реА рдПрдХ рд░рд┐рд▓реАрдЬ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЬреАрдердм рдореЗрдВ рдХрд┐рддрдиреЗ рдореБрджреНрджреЗ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ)ред

рдХрдо рд╕реЗ рдХрдо рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдирд╛рдо рдореЗрдВ рдКрдкрд░реА рдореИрдВ рдХреНрдпреЛрдВ рдерд╛, рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЦреЗрдж :)

рдпрд╣ (рдХреЗрд╡рд▓) рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ iProductth рд╕реЗ рдкрд╣рд▓реЗ IPython 0.1 рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ рд▓реЛрдЧ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ

рдорд╛рдлреА рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣рд╛рдВ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз # 11354 рд╣реИ рдЬреЛ рдЗрд╕ (рдкреНрд░рдореБрдЦ) рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж, рдЬрдм рд╕рдордп рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рджреЗрдЦреВрдВрдЧрд╛

рдЖрдкрдХреЛ рдЬрд▓реНрдж рд╣реА рд░рд┐рд▓реАрдЬ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рд╣рд╛рдВ, рдПрдХ рд╕реНрд╡рдпрдВрд╕реЗрд╡рдХ рдХреЗ рдкрд╛рд╕ рд╕рдордп рд╣реЛрдиреЗ рдкрд░ рд╣рдо рдРрд╕рд╛ рдХрд░реЗрдВрдЧреЗред рд╡рд╣рд╛рдБ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореБрджреНрджреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ jupyter_console рдХреЛ рд░рд┐рд▓реАрдЬрд╝ рдХрд░рдирд╛, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдИ рднреА рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП $ DAYJOB рдкрд░ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдХрд╛ рд╕рдордп рд▓реЗ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдХреЗ рдЕрдВрдд рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред

рджрд░рдЕрд╕рд▓, рдореБрдЭреЗ рдЕрдкрдиреЗ рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд░рд┐рдЧреНрд░реЗрд╢рди рдорд┐рд▓рд╛ред рдЕрдм рдЗрд╕реЗ рдареАрдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рджрд░рдЕрд╕рд▓, рдореБрдЭреЗ рдЕрдкрдиреЗ рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд░рд┐рдЧреНрд░реЗрд╢рди рдорд┐рд▓рд╛ред рдЕрдм рдЗрд╕реЗ рдареАрдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

PR # 11354 рдЕрдм рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдлрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд╛рд░ рдЬрдм рдпрд╣ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ? рдореИрдВ CTRL-O рдХреЗ рд▓рд┐рдП vim рдХреАрдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (ESC + o рдХрд░рддрд╛ рд╣реИ ...)

рдлрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд╛рд░ рдЬрдм рдпрд╣ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?

рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реНрд╡рдпрдВрд╕реЗрд╡рдХ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, 7.1 рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╢реЗрд╖ рдореБрджреНрджреЛрдВ рдХреЛ рдЯреНрд░рд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдШрдВрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдореБрдлреНрдд рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд░рд┐рд▓реАрдЬ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рд╢рд╛рдпрдж рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдХреЗ рдЕрдВрдд рдореЗрдВ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореМрдЬреВрджрд╛ PRs / рдореБрджреНрджреЛрдВ рдХреЛ рдЯреНрд░рд╛рдИ / рд░рд┐рд╡реНрдпреВ рдХрд░рдиреЗ / рдЯреИрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдорджрдж рдорд┐рд▓реЗрдЧреАред

рдЕрднреА рднреА async with рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рджреЛрдиреЛрдВ рдиреЗ рд╡рд░реНрддрдорд╛рди рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдФрд░ Py7 рд╕реЗ v7.1.1 рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред

In [16]: async with aiofiles.open('/tmp/foobar', 'r') as f:
    ...:     content = await f.read()

In [17]: content
Out[17]: 'hello'

рд╣рдо, рдСрдЯреЛрд╡рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЬреАрдм рдмрд╛рддрдЪреАрдд рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред

рдУрд╣, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛрдЧреАред рд╡реИрд╕реЗ рднреА, рдпрд╣ рдХрд╛рд░рдг рд╡рд┐рдлрд▓ рд╣реИ рдХрд┐ рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ

async with aiohttp.ClientSession() as session:
    pass|   # < cursor is there

рдпрд╣ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдкрд░ check_complete рдЪрд▓рддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, compile_command рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдмрд╛рдж рд╡рд╛рд▓рд╛ SyntaxError рдЙрдард╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ 'async with' рдХрд╛ рдЙрдкрдпреЛрдЧ async рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред
рдореЗрд░реЗ рдХрд╛рдВрдЯреЗ рдореЗрдВ рдореИрдВ рд╕рд┐рд░реНрдл SyntaxError рдореМрди рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрд╕рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЪрдордХрджрд╛рд░ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди / рд╡рд┐рдЪрд╛рд░:

  • рдЬрд╛рдБрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ autoawait рдЪрд╛рд▓реВ рд╣реИред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЙрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ SyntaxError рдорд╛рдорд▓реЗ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рднреА рдЪреАрдЬреЛрдВ рдХреЛ рдХрдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

  • рдпрджрд┐ рдСрдЯреЛрд╡рд╛рдЗрдЯ рдХрд╛, compile_command() рдХреЛ _asyncify() рд╕рд╛рде рд▓рд┐рдкрдЯреЗ рд╣реБрдП рдХреЛрдб рд╕реЗ рдЦрд┐рд▓рд╛рдПрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдпрд╣ SyntaxError рдирд╣реАрдВ рдмрдврд╝рд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдирдИ рд▓рд╛рдЗрди рдХрд╛ рдореБрджреНрджрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ _asyncify() рд╣реА рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ рдХреБрдЫ рд╕реНрддрд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдЧрдбрд╝рдмрдбрд╝ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

  • рд╢рд╛рдпрдж _AsyncSyntaxErrorVisitor рдХреЛрдИ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрд╕рдкрд╛рд╕ рдХреЗ рджреВрд╕рд░реЗ рд░рд╛рд╕реНрддреЗ рдХреЗ рд▓рд┐рдП рд╣реИ

рдореИрдВ рд╕рдорд░реНрдкрдг рдХреА рдХрдореА рдХреЗ рд▓рд┐рдП рдорд╛рдлреА рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдореИрдВ thw рдкреАрдЖрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╡реНрд╣рд╛рдЯреНрд╕рдПрдк рд▓рд┐рдЦрдиреЗ рд╕реЗ рдирдлрд░рдд рд╣реИ рдФрд░ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред

рд╣рдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдЖрдкрдХреА рдмрд╛рдд рд╣реИ n your 2, рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрджрд╕реВрд░рдд рд╣реИред рдиреНрдпреВрд▓рд╛рдЗрди рдХрд╛рдо рдХрд░рддреА рд╣реИред рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╕реАрдкреАрдереЙрди рдореЗрдВ рдЙрдЪрд┐рдд рд╕рд╣рдпреЛрдЧ рдорд┐рд▓реЗред

рдХреНрдпрд╛ рдпрд╣ рдореБрджреНрджрд╛ рдЕрднреА рднреА рдЕрдирд╕реБрд▓рдЭрд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рдмрдЧ рдХреЛ рдкрдХрдбрд╝ рд▓рд┐рдпрд╛ рд╣реЛрдЧрд╛ ...

рдпрд╣ рдЖрдЬ рдкрд╣рд▓реА рдмрд╛рд░ рдЖрдпрд╛ рд╣реИ (рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╕рд╛рде рдбреЗрдореЛ рдХреЗ рджреМрд░рд╛рди рдЬрдм рдореИрдВ рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ рдЬрдирд░реЗрдЯрд░ рдХреНрдпрд╛ рд╣реИ !!!)ред

рдХреНрдпрд╛ рдореИрдВ рдХреБрдЫ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдпрд╛ рдореБрдЭреЗ рдорд▓реНрдЯреА-рд▓рд╛рдЗрди рдХреЛрдб рдмреНрд▓реЙрдХ (CTRL-o рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рдЕрд▓рд╛рд╡рд╛) рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдорд╛рдирдХ рдкрд╛рдпрдерди REPL рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдЕрдиреБрд╕рд╛рд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо:

(tsa) BillsMacBookPro:develop billtubbs$ python
Python 3.5.5 | packaged by conda-forge | (default, Jul 23 2018, 23:45:11) 
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> for i in range(5):
...     x = i*2
...     print(x)
... 
0
2
4
6
8
>>> exit()

рдЖрдЬ рдЬрдм рдореИрдВ рдПрдХ iPython REPL рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдкрд░рд┐рдгрд╛рдо:

(tsa) BillsMacBookPro:develop billtubbs$ ipython
Python 3.5.5 | packaged by conda-forge | (default, Jul 23 2018, 23:45:11) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.0.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: for i in range(5): 
   ...:     x = i*2                                                                   

In [2]:      

IPython REPL рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдХреЛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рд╡реИрдХрд▓реНрдкрд┐рдХ рддреАрд╕рд░реА рдкрдВрдХреНрддрд┐ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдореИрдВ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдПрдВрдЯрд░ рджрдмрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп CTRL-o рджрдмрд╛рдХрд░ рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:

In [2]: for i in range(5): 
   ...:     x = i*2 
   ...:     print(x)                                                                  
0
2
4
6
8

IPython 7.0.1 - ...

рдХреГрдкрдпрд╛ рдЕрдкрдиреЗ IPython рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░реЗрдВ, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИ, рдЕрднреА рднреА async рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдХрд┐рдирд╛рд░реЗ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред

рдореБрдЭреЗ рдорд╛рдл рдХрд░реЗрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдореЗрдиреЗ рдХрд░ рджрд┐рдпрд╛ред conda update ipython рдореБрдЭреЗ # All requested packages already installed.

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реВрдВред рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреНрдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдЕрдкрдЧреНрд░реЗрдб рдХрд░реВрдВ?

рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП pip install рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдк рдПрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рднреА рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЬрдм рдЙрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЗрдВ рд╣реЛрддреА рд╣реИрдВ, рддреЛ рдореИрдВ рдЖрдХреНрд░рд╛рдордХ рддрд░реАрдХреЗ рд╕реЗ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдЬрдм рддрдХ рдХрд┐ рдореИрдВ рдЖрдИрдкреАрдереЙрди рдХреЛ рд▓реЙрдиреНрдЪ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдФрд░ рдлрд┐рд░ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

ghost picture ghost  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gregcaporaso picture gregcaporaso  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jwkvam picture jwkvam  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ghost picture ghost  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mpacer picture mpacer  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ