Werkzeug: рд╡рд┐рдВрдбреЛрдЬ рдХрдВрд╕реЛрд▓_рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкреБрдирдГ рд▓реЛрдбрд░ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 13 рдЬреВрди 2017  ┬╖  14рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pallets/werkzeug

рдореИрдВ рдЕрдЬрдЧрд░ 3 рдкрд░ рдПрдкрд┐рд╕реНрдЯрд╛рд░ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдПрдХ рдРрд╕реЗ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рд╡рд░реНрдХрдЬрд╝реЗрдЧ рд░реАрд▓реЛрдбрд░ рддрдХ рд▓реЗ рдЬрд╛рдпрд╛ рд╣реИред

(fresh) C:\Users\uskaxb07\PycharmProjects\testapi>apistar run
Starting up...
 * Restarting with stat
  File "C:\Users\uskaxb07\env\fresh\Scripts\apistar.exe", line 1
SyntaxError: Non-UTF-8 code starting with '\x90' in file C:\Users\uskaxb07\env\fresh\Scripts\apistar.exe on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

use_reloader рдХреЛ рдХреЙрд▓ рд╕реЗ run_simple() рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ https://github.com/pallets/werkzeug/blob/master/werkzeug/_reloader.py#L118 рд▓реИрдЯрд┐рди 1 рдореЗрдВ рдХреБрдЫ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЬрдм рдУрдПрд╕ рд╡рд┐рдВрдбреЛрдЬрд╝ рдФрд░ рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг рд╣реИ 2 рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдЧреИрд░-рдпреВрдЯреАрдПрдл -8 рд╕рд┐рдВрдЯреЗрдХреНрд╕ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдкрд╛рдпрдерди 3 рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ?

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

рдХреНрдпрд╛ рдХреЛрдИ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВ рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдореИрдВ рдПрдкрд┐рд╕реНрдЯрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рдФрд░ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рдВрдбреЛрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред

рдореИрдВрдиреЗ рдЗрд╕рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдЦреЛрдж рд▓рд┐рдпрд╛ред рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ _get_args_for_reloading() рдХреЗ рд╕рд╛рде рд╣реИ ред рд╡рд╣ рд╡рд┐рдзрд┐ рддрд░реНрдХ рджреЗрддрд╛ рд╣реИ рдЬреЛ ['python.exe', 'apistar.exe', 'run'] рдЬреЛ subprocess.call() рд╣реЛрдиреЗ рдкрд░ рд╡рд╣ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ python.exe apistar.exe run рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред

рддреЛ рдореБрджреНрджрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реЛрдЪрд╛ рдерд╛ред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдЕрдиреНрдп рд╡рд░реНрдХрдЬрд╝реБрдПрдЧ рдЖрдзрд╛рд░рд┐рдд рдврд╛рдВрдЪреЗ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдШрдЯрдирд╛ рд╣реЛрдЧреА, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрдВрд╕реЛрд▓_рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЗрдирд░реЗрдЯ .exe рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рднреА рд╡рд┐рдВрдбреЛрдЬрд╝ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд▓рд╛рдн рд╣реЛрдЧрд╛ред

рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдореБрджреНрджреЗ рдХрд╛ рд╢реАрд░реНрд╖рдХ рдмрджрд▓ рд░рд╣рд╛ рд╣реВрдВред

рдпрджрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╡рд┐рдВрдбреЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреЗ рднреАрддрд░ rv рдХреЗ sys.executable рддрддреНрд╡ рдХрд╛ рдирд┐рдкрдЯрд╛рди рдХрд░рддреА рд╣реИ рддреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдирд╛ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ:

def _get_args_for_reloading():
    """Returns the executable. This contains a workaround for windows
    if the executable is incorrectly reported to not have the .exe
    extension which can cause bugs on reloading.
    """
    rv = [sys.executable]
    py_script = sys.argv[0]
    if os.name == 'nt' and not os.path.exists(py_script) and \
       os.path.exists(py_script + '.exe'):
        py_script += '.exe'
        rv.pop()
    rv.append(py_script)
    rv.extend(sys.argv[1:])
    return rv

рдЕрдЧрд░ рдЖрдк рдХрд┐рд╕реА рдкреАрдЖрд░ рдХреЛ рд╕рдмрдорд┐рдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдЙрд╕рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЪрд╛рд╣реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рд╛ рд▓рд┐рдЦрдиреЗ рдкрд░ рдереЛрдбрд╝рд╛ рдЕрдбрд╝рд╛ рд╣реБрдЖ рд╣реВрдВред рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ unittest.mock рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдкреИрдЪрд┐рдВрдЧ sys.executable рдФрд░ os.name рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ 27 рдореЗрдВ рднреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╣реИред рдХреЛрдИ рд╕рд▓рд╛рд╣?

рд╕рд╛рде рд╣реА рдпрд╣рд╛рдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдмреНрд░рд╛рдВрдЪрд┐рдВрдЧ рд░рдгрдиреАрддрд┐ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рдореБрджреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╡рд░реНрддрдорд╛рди рд░рдЦрд░рдЦрд╛рд╡ рд╢рд╛рдЦрд╛ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬрд╛рддреЗ рд╣реИрдВ?

рдЖрдк 0.12-рд░рдЦрд░рдЦрд╛рд╡ рд╕реЗ рд╢рд╛рдЦрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдкрд╣рд▓реЗ рдкреИрдЪ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдлрд┐рд░ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВред

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

рдпрд╣ рддрдм рд╣реЛрдЧрд╛ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ exe рд▓реЙрдиреНрдЪрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП setuptools рд╣реЛрдВред рдпрджрд┐ рдЖрдк рдЕрдк-рдЯреВ-рдбреЗрдЯ-рдкрд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХреНрд╕рдИ рд▓реЙрдиреНрдЪрд░ ( рдПрдХреНрд╕рдИ рдореЗрдВ рдмрдВрдбрд▓ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкрд╛рдпрдерди рд╕реАрдзреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ ( рд░рдирдкреА рдбреЙрдХреНрд╕ )ред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдареАрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рддрдм рднреА рд╣реЛрдЧрд╛ рдЬрдм рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдлреНрд▓рд╛рд╕реНрдХ рдХреЛ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдореЛрдб ( pip install -e ) рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

@androiddrew @davidism рдЗрд╕ рдкреАрдЖрд░ рдкрд░ рдХрд┐рд╕реА рднреА рдЕрджреНрдпрддрди?

@segevfiner рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреА рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЖрдк рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдлреНрд▓рд╛рд╕реНрдХ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣рдореЗрдВ рд╕реЗрдЯрдЕрдкрдЯреВрд▓ рдореЗрдВ рдореВрд▓ рдХрд╛рд░рдг рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

@ewpete рдореВрд▓ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╕реЗрдЯрдЕрдкрдЯреВрд▓ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рд▓реЙрдиреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп,
sys.argv[0] рдПрдХ рдкрд╛рдпрдерди рд▓рд┐рдкрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣реИ
рд▓рд╛рдВрдЪрд░ exe. рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ exe рдХреЗ рд╕рд╛рде рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - "-script"
рд╕рдВрд▓рдЧреНрди рдФрд░ exe рд▓реЛрдб рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рддрд╛ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ exe рдХреЛ рд╕реАрдзреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рдРрд╕рд╛ рд╣реА рдПрдХ рдкрд╛рдпрдерди рд▓рд┐рдкрд┐ рд╣реИ
рд╢реЗрдмреИрдВрдЧ рдХреЗ рд╕рд╛рде рдЬреЛ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рд╕реЗрдЯрдкреВрд▓ рдпреВрдирд┐рдЯреНрд╕ рдкрд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди
рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рдкреНрд▓реЗрди рдкрд╛рдпрдерди рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдирд╛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИ (рдЬрдм
рдкрд╛рдЗрд▓рд╛рдВрдЪрд░ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИ), рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрд░реНрдмрд┐рдЯрд░реА рдкрд╛рдпрдерди рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рд╣реЛрдЧрд╛
рдЬреЛ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ .py рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрджреНрдз рд╣реИ, рдЬреЛ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рд╡рд░реНрддрдорд╛рди рдкрд╛рдпрдерди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╡рд╣реА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ
рдХрд┐рд╕реА рднреА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд╛рдпрдерди рд▓рд┐рдкрд┐ рд╕реЗ рд╣рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╢рд╛рдпрдж рдирд╣реАрдВ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдпред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдкрд╛рдЗрдк рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ (рдбрд┐рд╕реНрдЯрд▓рд┐рдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХреНрд╕рдИ рд▓реЙрдиреНрдЪрд░ рдЬрд┐рд╕рдореЗрдВ рд╣реИ
рдЬрдирд░реЗрдЯ рдХреА рдЧрдИ рд▓реЙрдиреНрдЪрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЬрд╝рд┐рдк рдХреЗ рдЕрдВрдд рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ
рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдпред рдЗрд╕реЗ рдПрдХ __main__.py рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ (A
zipapp) рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдкрд╛рдпрдерди рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕реЗ рд╕реЗрдЯрдкреНрдЯреВрд▓ рдореЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реЛрдЧрд╛ рдПрдХ рд╕рдорд╛рди/рд╕рдорд╛рди рдкреНрд░рдХрд╛рд░ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛
рд╕реЗрдЯрдЕрдкрдЯреВрд▓ рдореЗрдВ рд▓рд╛рдВрдЪрд░ред рдФрд░ http://xkcd.com/1172/ рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВ, рдпрд╣
рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЙрд╕ рдХреЛрдб рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ рдЬреЛ рд╕реЗрдЯрдЕрдкрдЯреВрд▓ рд▓реЙрдиреНрдЪрд░ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ
рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "*-script.py" рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдореИрдВрдиреЗ рдЪреЗрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛
рдХреНрдпрд╛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛/рдЬрдирд╕рдВрдкрд░реНрдХ рд╣реИред

рд╢рд╛рдпрдж рдпрд╣рд╛рдБ рдПрдХ рдЫреЛрдЯрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрдирд╛ рдареАрдХ рд╣реИ рддрд╛рдХрд┐ Werkzeug
рд░реАрд▓реЛрдбрд░ рд╕реЗрдЯрдЕрдкрдЯреВрд▓ рдХреА рд╡рд░реНрддрдорд╛рди рд╢реИрд▓реА рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рд▓рд╛рдВрдЪрд░ред рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред

╫С╫к╫Р╫и╫Щ╫Ъ 28 ╫С╫а╫Х╫С '2017 20:46, "ewpete" [email protected] ╫Ы╫к╫С:

@androiddrew https://github.com/androiddrew @davidism
https://github.com/davidism рдЗрд╕ рдкреАрдЖрд░ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?

@segevfiner https://github.com/segevfiner рдХреНрдпрд╛ рдЖрдк рдереЛрдбрд╝рд╛ рдФрд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ
рдЖрдкрдХреА рд╕рдмрд╕реЗ рд╣рд╛рд▓ рдХреА рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рд╡рд┐рд╡рд░рдг? рдХреНрдпрд╛ рдЖрдк рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ
рд╕рдВрднрд╡рддрдГ рдлреНрд▓рд╛рд╕реНрдХ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╕реЗрдЯрдЕрдкрдЯреВрд▓ рдореЗрдВ рдореВрд▓ рдХрд╛рд░рдг рдХреЛ рдареАрдХ рдХрд░реЗрдВ?

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/pallets/werkzeug/issues/1136#issuecomment-347623921 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AXlg_8OSR3NdbPJzM87dyKPUAA9NpXJ6ks5s7FT7gaJpZM4N5Fcb
рд╡реНрдпрд╛рдкреНрддрд┐

@ewpete рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдкреАрдЖрд░ рдерд╛ред рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ, рджреЗрд╡ рдЧрд╛рдЗрдб рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдФрд░ рдкреАрдЖрд░ рд░рдЦрдиреЗ рдХреА рдкреВрд░реА рдХреЛрд╢рд┐рд╢ рдХреАред рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рдЕрдзрд┐рдХ рджрд┐рд╢рд╛ рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкреАрдЖрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рд╕реБрдЭрд╛рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдПред рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХрднреА рдирд╣реАрдВ рд╕реБрдирд╛ рдХрд┐ рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЯреАрдо рдХреА рдЕрдкреЗрдХреНрд╖рд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рддрдм рд╕реЗ рдЗрд╕реЗ рджреЗрдЦрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд▓реЛрдЧ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдореЗрд░реЗ рдкрд╛рд╕ рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдмрд╣реБрдд рд╕реАрдорд┐рдд рд╕рдордп рд╣реИред рдЪрд┐рдВрддрд╛ рдордд рдХрд░реЛ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛ред

@davidism рди рдХреЗрд╡рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд▓реНрдХрд┐ рдЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЬреАрд╡рд┐рдд рд░рдЦрдиреЗ рдХрд╛ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрднреА рднреА рд╡рд┐рд▓рдп рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╕реНрдерд╛рдпреА рд╕реБрдзрд╛рд░ _get_args_for_reloading() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╣реАрдВ рдмрдВрдж рдХрд░рдирд╛ рд╣реИред рдлреНрд▓рд╛рд╕реНрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕реЗ manage.py рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХрд╣реАрдВ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдорджрдж рдорд┐рд▓рддреА рд╣реИ:

import werkzeug._reloader
import os, sys

def _get_args_for_reloading():
    rv = [sys.executable]
    py_script = sys.argv[0]
    if os.name == 'nt' and not os.path.exists(py_script) and \
       os.path.exists(py_script + '.exe'):
        py_script += '.exe'
    if os.path.splitext(rv[0])[1] == '.exe' and os.path.splitext(py_script)[1] == '.exe':
        rv.pop()
    rv.append(py_script)
    rv.extend(sys.argv[1:])
    return rv
werkzeug._reloader._get_args_for_reloading = _get_args_for_reloading
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕