Ipython: рдкрдЯрд▓рд┐рдм, рдкреИрдерд▓рд┐рдм рд╣рд░ рдЬрдЧрд╣ред

рдХреЛ рдирд┐рд░реНрдорд┐рдд 28 рдЕрдЧре░ 2020  ┬╖  22рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: ipython/ipython

рдХрдИ рдЬрдЧрд╣ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдо рдкрд╛рдерд▓рд┐рдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ рдЬреЛ with open(...) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рдкреВрдЫреЗрдВ:

  • рддрд░реНрдХ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ?
  • рдХреНрдпрд╛ рдпрд╣ рдЗрд╕реЗ Path() рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ,
  • рдХреЛрдб рдореЗрдВ рдХрд┐рддрдиреА рджреВрд░ рддрдХ рдореИрдВ рдЗрд╕реЗ рдкрде рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВред

рдЬрд┐рддрдирд╛ рдЖрдк рдЪрдмрд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╛ рдЬрд┐рддрдирд╛ рдореИрдВ рд╕рдореАрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ) рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛рдЯрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рди рдХрд░реЗрдВ, рдПрдХ рд╕рдордп рдореЗрдВ 1 рд╕реНрдерд╛рди рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

Hacktoberfest good first issue help wanted

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

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

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП https://github.com/ipython/ipython/pull/12512 рджреЗрдЦреЗрдВ

Hi @Carreau , рдпрджрд┐ рдХреЛрдИ Pathlib рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП /core /page.py рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдореИрдВ рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛ рд▓реЗ рд╕рдХрддрд╛ рд╣реВрдВ?

Hi @Carreau , рдпрджрд┐ рдХреЛрдИ Pathlib рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП /core /page.py рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдореИрдВ рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛ рд▓реЗ рд╕рдХрддрд╛ рд╣реВрдВ?

рдХреГрдкрдпрд╛, рдХреГрдкрдпрд╛ред рдзрдиреНрдпрд╡рд╛рджред

рдирдорд╕реНрддреЗ, рдореИрдВ рдХреЛрд░ / рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡реНрд╕рд╣реЗрд▓реНрде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рд╡рд╣рд╛рдВ рдкрд╛рдерд▓реАрдм рдХрд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдХреНрдпрд╛ рдореИрдВ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдЕрд░реЗ @Carreau рдХреНрдпрд╛ рдореИрдВ рдкрд░реАрдХреНрд╖рдг / iptestcontroller.py рдФрд░ core / magics / рдирд┐рд╖реНрдХрд╛рд╕рди?

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: https://docs.python.org/3/library/pathlib.html#correspondence -to-in-the-os-рдореЙрдбреНрдпреВрд▓

with open() рдЕрд▓рд╛рд╡рд╛ рдФрд░ рднреА рдХрдИ рдЬрдЧрд╣реЗрдВ рд╣реИрдВ, рдЬреЛ рдкреИрдерд▓рд┐рдм рдЙрдкрдЪрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИрдВ:

-    conda_history = os.path.join(sys.prefix, 'conda-meta', 'history')
-    return os.path.exists(conda_history)
+    return Path(sys.prefix, 'conda-meta', 'history').exists()

рдпреЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ рд╣реИред

рд╢рдирд┐, 10 рдЕрдХреНрдЯреВрдмрд░, 2020 рдХреЛ 8:33 рдмрдЬреЗ рдмреНрд▓реЗрдЬрд╝реЗрдЬ рдорд╛рдЗрдХреЗрд▓ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдкрд░
рд▓рд┐рдЦрд╛ рдерд╛:

рдЗрд╕рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
https://docs.python.org/3/library/pathlib.html#correspondence -to-tools-in-the-os-рдореЙрдбреНрдпреВрд▓

рдЦреБрд▓реЗ () рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрдИ рдЬрдЧрд╣ рд╣реИрдВ рдЬреЛ рдкрд╛рдерд▓рд┐рдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИрдВ
рдЙрдкрдЪрд╛рд░:

  • conda_history = os.path.join (sys.prefix, 'conda-meta', 'history') - рд╡рд╛рдкрд╕реА os.path.exists (conda_history) + рд╡рд╛рдкрд╕реА рдкрде (sys.prefix, 'conda-meta', 'history') редрдореМрдЬреВрдж()

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/ipython/ipython/issues/12515#issuecomment-7066666565 ,
рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ADMY5F73MJDQ6CL32KEUZS3SKD4LXANCNFSM4QNPWX2Q
ред

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: https://docs.python.org/3/library/pathlib.html#correspondence -to-in-the-os-рдореЙрдбреНрдпреВрд▓

with open() рдЕрд▓рд╛рд╡рд╛ рдФрд░ рднреА рдХрдИ рдЬрдЧрд╣реЗрдВ рд╣реИрдВ, рдЬреЛ рдкреИрдерд▓рд┐рдм рдЙрдкрдЪрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИрдВ:

рд╣рд╛рд▓рд╛рдВрдХрд┐ ... рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХрдо рддреБрдЪреНрдЫ рдФрд░ рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╡рдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдЙрдиреНрд╣реЗрдВ рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм PosixPath рд╡рд╕реНрддреБ рдХреЛрдб рдХреЛ рдКрдкрд░ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рддреЛрдбрд╝рддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ ' '.join() рдЕрдиреНрдп рд╢реЗрд▓ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдЕрднреА рднреА рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрдЧрд╣ рдмрдЪреА рд╣реИ? рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЛрдЧ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдХреБрдЫ рдорд┐рд▓рд╛, рдХреБрдЫ рдирд╣реАрдВ

рдЕрднреА рднреА рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрдЧрд╣ рдмрдЪреА рд╣реИ? рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЛрдЧ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдореИрдВ рдзреАрд░реЗ-рдзреАрд░реЗ рдкреАрдЖрд░рдПрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдорд░реНрдЬ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдиреНрдп рд╕реНрдерд╛рди рдмрдЪреЗ рд╣реИрдВред

рдЖрдк рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рд╣реИрдВ; рдЙрди рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдЦреЛрдЬреЗрдВ рдЬреЛ cast_unicode / cast_bytes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╡реЗ рд╣рдЯрд╛рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдкреБрд░рд╛рдиреЗ рдкрд╛рдпрдерди 2 рд╕рдВрдЧрддрддрд╛ рдХреЗ рдХрд╛рд░рдг рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣реИ

def find_file(obj) -> str:
  ...
    fname = None
    try:
        fname = inspect.getabsfile(obj)
    except TypeError:
        # For an instance, the file that matters is where its class was
        # declared.
        if hasattr(obj, '__class__'):
            try:
                fname = inspect.getabsfile(obj.__class__)
            except TypeError:
                # Can happen for builtins
                pass
    except:
        pass
    return cast_unicode(fname)

рдпрджрд┐ рдЖрдк рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ inspect.getabsfil рд╣рдореЗрд╢рд╛ рд╕реНрдЯреНрд░рдЧрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рдЗрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ cast_unicode рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдХрд╛рдо рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдмреАрдЯреА рдХреЛрдбрдмреЗрд╕ рдХреА рд╕рдлрд╛рдИ рдХрд░реЗрдЧрд╛ред

рдореИрдВрдиреЗ рдкреВрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЦреЛрдЬ рдХреА рдФрд░ рдореИрдВрдиреЗ рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдХреЛ рдкрд╛рдпрд╛ред рдХреНрдпрд╛ рдореБрдЭреЗ рдкреИрдерд▓рд┐рдм рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдЙрди рд╕рднреА рдХреЛ рдмрджрд▓рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдореБрдЭреЗ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЬрдЧрд╣ рдирд╣реАрдВ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рди рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЕрдЧрд░ рдореИрдВ рдЖрдкрдХреЛ рд╕рдордЭ рдирд╣реАрдВ рд╕рдХрд╛ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдореИрдВ paths.py рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐ рдорд┐рд▓реА:

assert isinstance(ipdir, str)

рдРрд╕реЗ рдХрдердиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ "all path manipulation should be str(unicode), but are not." рдХрд╣рддреЗ рд╣реБрдП рд╕рдВрджреЗрд╢ рджреЗрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреА рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдкреИрдерд▓рд┐рдм рдХреА рдЪрд╛рд▓ рдХрд╛рдо рдХрд░ рд╕рдХреЗ?

рдореИрдВ paths.py рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐ рдорд┐рд▓реА:

assert isinstance(ipdir, str)

рдРрд╕реЗ рдХрдердиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ "all path manipulation should be str(unicode), but are not." рдХрд╣рддреЗ рд╣реБрдП рд╕рдВрджреЗрд╢ рджреЗрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреА рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдкреИрдерд▓рд┐рдм рдХреА рдЪрд╛рд▓ рдХрд╛рдо рдХрд░ рд╕рдХреЗ?

рд╣рд╛рдБ, рдХреБрдЫ рдЬрдЧрд╣реЛрдВ рдХреЗ рдХрд╛рд░рдг рдХрд╛рдо рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред

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

рдЕрдм рдпрд╣ рдмрдВрдж рдХреНрдпреЛрдВ рд╣реИ?

@meeseeksdev рдЦреБрд▓рд╛

Awww, рдХреНрд╖рдорд╛ рдХрд░реЗрдВ ashwinvis рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, рдХреГрдкрдпрд╛ рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВрдЯреЗрдирд░ рд╕реЗ рдкреВрдЫреЗрдВред

рдореИрдВ рд╕реНрд░реЛрдд рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рдореЗрд░реЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рдмрд╛рдж, рдкреАрдЖрд░ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

рдореИрдВ рд╕реНрд░реЛрдд рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рдореЗрд░реЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рдмрд╛рдж, рдкреАрдЖрд░ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

рдирдорд╕реНрдХрд╛рд░ @squarebat
рддреБрдореНрд╣реЗрдВ рдпрд╣ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

  • рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рд░реЗрдкреЛ рдХреА рдЬрдбрд╝ рдореЗрдВ рдЪрд▓рд╛рдХрд░ рдкрд░реАрдХреНрд╖рдг рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
$ pip3 install -e .[test]
  • рдлрд┐рд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
$ iptest

рдореИрдВ test_run.py рдлрд╝рд╛рдЗрд▓ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд░рд╣реА рд╣реИред рджреЛ рдореБрдЦреНрдп рддреНрд░реБрдЯрд┐рдпрд╛рдБ рд╣реИрдВ

  • undefined variable get_ipython (рдпрд╣ рдПрдХ рдЖрдпрд╛рдд рдЬреЛрдбрд╝рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдЧрд▓рдд рд▓рдЧрддрд╛ рд╣реИ)

  • undefined variable _ip : рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ _ip рдХреЛ _ip = get_ipython() рд░реВрдк рдореЗрдВ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИред

рдореИрдВрдиреЗ pip install . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдирд╛ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ
рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВрдиреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░рддреЗ рд╕рдордп рдХреЛрдИ рдЧрд▓рддреА рдХреА рд╣реИ, рдпрд╛ рдпрджрд┐ test_run.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдИ рдмрдЧ рд╣реИред

рдореИрдВрдиреЗ pip install рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдирд╛ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ

рдЖрдкрдХреЛ pip install -e .[test]

-e рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рд╕рдВрдкрд╛рджрди рдпреЛрдЧреНрдп рдореЛрдб рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред

рдЕрд╕реНрд╕рд▓рд╛рдо рдУ рдЕрд▓реИрдХреБрдо! рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдпреЛрдЧрджрд╛рди рд╣реИ, рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рдХреНрдпрд╛ рдореБрдЭреЗ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

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

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

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

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

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

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

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