рдЪреАрдЬреЗрдВ рд╕рд┐рд░ рдкрд░ рдЖ рд░рд╣реА рд╣реИрдВ рдФрд░ рдлреИрдмреНрд░рд┐рдХ рдХреЗ рдХрд╛рд░реНрдп рдирд┐рд╖реНрдкрд╛рджрди рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрдкрдиреЗ "рдерд░реНрдб рдкрд╛рд░реНрдЯреА" рдЯреВрд▓/рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдЗрд╕реЗ рд╣рдорд╛рд░реА рдПрд╕рдПрд╕рдПрдЪ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ/рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдЕрднреА, рдлреИрдм-рдПрдЬрд╝-рд░рдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЕрднреА рднреА ssh
рдФрд░ PyCrypto
рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдмреЗрдХрд╛рд░ рд╣реИред
рдФрд░ рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдЯрд╛рд╕реНрдХ рд░рдирд┐рдВрдЧ рдФрд░ рдПрд╕рдПрд╕рдПрдЪ рдХреЗ рдмреАрдЪ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ "рдлреИрдмреНрд░рд┐рдХ" "рдПрд╕рдПрд╕рдПрдЪ + рдирдП рд░рдирд░ рдЯреВрд▓ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛" рд╣реЛрдирд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ (рджреЛрдиреЛрдВ рдкреБрди: рдкреАрдЫреЗ рдХреА рд╕рдВрдЧрддрддрд╛, рдФрд░ рд╕рдордЧреНрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛)ред
рдмреИрдХрд╡рд░реНрдб рдХрдВрдкреЗрдЯ рдХреА рдмрд╛рдд рдХрд░реЗрдВ рддреЛ, рдореИрдВ рдЗрд╕ 2.0 рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ 2.0 рдмреИрдХрд╡рд░реНрдб рдЕрд╕рдВрдЧрдд рдмрд╛рдзрд╛ рдкрд░ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _more_ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдлреИрдмреНрд░рд┐рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдЗрдВрд╕реНрдЯреЙрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рд╡рд┐рднрд╛рдЬрди рдХрд░рдирд╛, рдХрд╣реЗрдВ, 1.6 рдпрд╛ рд╕рдордп рдмреЗрд╣рддрд░ рд╣реЛрдиреЗ рдкрд░ 1.7 рднреА рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдирдпрд╛ рдЙрдкрдХрд░рдг рд╣реЛрдЧрд╛:
:рдХреЗрдХ:
рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдпрд╛ рдЙрдкрдХрд░рдг рдЬреЛ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рдлрд┐рдЯ рд╣реЛрдЧрд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдореЗрд╢рд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рднреА рд╣реЛрддрд╛ рд╣реИред
рдЕрджреНрдпрддрди рд╡рд┐рд╡рд░рдг рдПрдХ рдЧреБрдЪреНрдЫрд╛ред
@kennethreitz : рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлреИрдмреНрд░рд┐рдХ рдХреЗ рдЙрд╕ рдЖрдзреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреА рдореМрдЬреВрджрд╛ рдЬрд░реВрд░рддреЛрдВ/рдлреАрдЪрд░ рд╕реЗрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдирдИ "рдЪреАрдЬ" рд╣реЛрдЧреАред рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рдЕрдкрдиреА рдЗрдХрд╛рдИ рдкреБрди: рд╕реНрдерд╛рдкрдирд╛, рд╡рд┐рдХрд╛рд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЗрддреНрдпрд╛рджрд┐ рд╣реЛ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдлреИрдмреНрд░рд┐рдХ рджреЗрд╡/рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд┐рдЪрд╛рд░:
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рдирд╛рдореЛрдВ рдХреЛ рдЪреВрд╕рддрд╛ рд╣реВрдБ :(
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ "рдХрд┐рд░реНрдХ" (рдХрдкреНрддрд╛рди рдХрд┐рд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ) рдЬреИрд╕реА рдЪреАрдЬреЗрдВред
рдореИрдВрдиреЗ рдХреБрдЫ рдРрд╕реЗ рдХрдкрдбрд╝реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬреЛ рдЪрд▓ рд░рд╣реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрд╕ рдПрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рдЬреЛ рдХрд╛рд░реНрдпреЛрдВ + рдХрдкрдбрд╝реЗ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛред
рд▓реЗрдХрд┐рди рд▓реВрдо рдХреЛрдИ рдмреБрд░рд╛ рдирд╛рдо рдирд╣реАрдВ рд╣реИ рдФрд░ рди рд╣реА рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдирд╛рдо рдордВрдердиред
runner
executor
go
go
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИaway
рдпрд╛ fuck_yourself
рдпрд╛ bother_somebody_else
weaver
рдзрдиреНрдпрд╡рд╛рдж, рдСрдХреНрд╕рдлрд╝реЛрд░реНрдб рдЕрдореЗрд░рд┐рдХрди рд░рд╛рдЗрдЯрд░ рдХрд╛ рдерд┐рд╕реЙрд░рд╕ рдЬреИрд╕рд╛ рдХрд┐ OS X рдХреЗ рдбрд┐рдХреНрд╢рдирд░реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ!
run
execute
go
create
(рдЬреИрд╕реЗ make
)fabricate
(рдмрд╣реБрдд рд▓рдВрдмрд╛, рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рднреНрд░рдорд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ fab
)fab
(рдЕрд░реНрдерд╛рдд рдЗрд╕ рдирдП lib рдХреЛ рдЕрд▓рдЧ рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА fab
рдмрд╛рдЗрдирд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ; рдпрджрд┐ рджреЛрдиреЛрдВ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдореМрдЬреВрдж рд╣реИрдВ рддреЛ рдлреИрдмреНрд░рд┐рдХ рдПрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд▓реЗрддрд╛ рд╣реИ? рдПрдХ рдЧреВрдВрдЧрд╛ рд╡рд┐рдЪрд╛рд░ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред)generate
produce
fashion
(рдореЗрд╣)build
devise
shape
setup
weave
рдЖрдЬ рдЯреЙрдк рдмреНрд░реЗрдирд╕реНрдЯреЙрд░реНрдорд┐рдВрдЧ рдлреЙрд░реНрдо рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдореЛрд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
@dstufft рд▓реВрдо рдХрд╛ рдПрдХ рдареАрдХ рдирд╛рдо рд╣реИ, рдФрд░ рд╕реАрдИрдУ рдПрдХ рдЕрдзрд┐рдХрддрд░ рдареАрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ (рдХреЙрдорд┐рдХ рдмреБрдХ рд╕рдВрджрд░реНрдн рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реИ, рдЕрдЧрд░ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рдЕрд╕реНрдкрд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЪрд░рд┐рддреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрднреА рдирд╣реАрдВ рд╕реБрдирд╛;))ред рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдПрдХ рдЕрдЪреНрдЫреЗ рдмрд╛рдЗрдирд░реА рдирд╛рдо рдХреЗ рд╕рд╛рде рдЖ рд░рд╣реА рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЬрд░реВрд░реА рд╣реИред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдмреЙрд╕: рдЪреАрдЬреЗрдВ рдЪрд▓рд╛рддрд╛ рд╣реИред
рд╣рд┐рд╕реНрд╕рд╛ рд▓реЗрдирд╛ рдХрд┐рдВрдбрд╛ рдореЗрдХ рдХреА рддрд░рд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдПред
рдХрд╛рд░реНрдпрдХрд╛рд░реАред
рдореБрдЭреЗ рдЗрд╕рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЗрд░реНрдж-рдЧрд┐рд░реНрдж рдЙрдиреНрдореБрдЦ рдХрд░рдирд╛ рдкрд╕рдВрдж рд╣реИред рд╣рдореНрдо..
@kennethreitz рдореБрдЭреЗ рдмреЙрд╕ рдкрд╕рдВрдж рд╣реИ, рдиреНрдпреВ рдЬрд░реНрд╕реА рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд╡рд┐рдд рднреНрд░рдо рдХреЗ рдЕрд▓рд╛рд╡рд╛ (рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд╕рд┐рд░реНрдл рдПрдХ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ, рдХреЙрд▓реЗрдЬ рдореЗрдВ рдЦрд░рд╛рдм рд░реВрдордореЗрдЯ рдЕрдиреБрднрд╡)
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ @dstufft рд╕реЗ рдХрд╣рд╛, рдмрд╛рдЗрдирд░реА рдирд╛рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЙрдиреНрд╣реЗрдВ рднреА рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрджрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ-рдирд╛рдо-рдП-рдмрд╛рдЗрдирд░реА рдереЛрдбрд╝реЗ рдЧреВрдВрдЧрд╛ рд▓рдЧрддрд╛ рд╣реИ рддреЛ рдПрдХ рдорд╣рд╛рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд╛рдо рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ;)
рдиреМрдХрд░рд╛рдиреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдЖрдкрдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рддрд╛ рд╣реИред "рдореЗрдХ" рдХреЗ рд╕рдорд╛рдиред
рдмрдЯрд▓рд░ рднреАред рд╣рдо рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмреНрд░рд┐рдЯрд┐рд╢-рд▓рдЧрдиреЗ рд╡рд╛рд▓рд╛ рдмрдЯрд▓рд░ рдирд╛рдо рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред
maid clean
, maid release
, maid test
ред рдореБрдЭреЗрдВ рдпрд╣ рдкрд╕рдВрдж рд╣реИред
рдореЗрд░реЗ (рдЕрд╕реАрдо, рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ) рдорд░реНрджрд╛рдирдЧреА рдкрд░ рдереЛрдкрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, maid
рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдХреНрд░рд┐рдпрд╛ рдкреИрдЯрд░реНрди рдореЗрдВ рдлрд┐рдЯ рди рд╣реЛред (рдпрд╛рдиреА рдпрд╣ рдмреЗрд╣рддрд░ рдЧреИрд░-рдХреНрд░рд┐рдпрд╛ рдмрд╛рдЗрдирд░реА рдирд╛рдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред) (рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдФрд░ рдмрдЯрд▓рд░ рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ _do_? рдмрдЯрд▓?)
рдореИрдВрдиреЗ рдмрд╕ рдирд╛рдо рдареБрдХрд░рд╛ рджрд┐рдпрд╛, рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВред рдореБрдЭреЗ рдпрд╣ рдЕрдм рддрдХ рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИред
рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдмреЙрд╕ рдкрд╣рд▓реЗ рд╣реА FWIW рд▓рд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ
рдордВрдЧрд▓рд╡рд╛рд░, 21 рдлрд░рд╡рд░реА, 2012 рдХреЛ рд░рд╛рдд 8:38 рдмрдЬреЗ, рдЬреЗрдл рдлреЛрд░реНрд╕рд┐рдпрд░ рдиреЗ рд▓рд┐рдЦрд╛:
рдореЗрд░реЗ (рдЕрд╕реАрдо, рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ) рдорд░реНрджрд╛рдирдЧреА рдкрд░ рдереЛрдкрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛,
maid
рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдХреНрд░рд┐рдпрд╛ рдкреИрдЯрд░реНрди рдореЗрдВ рдлрд┐рдЯ рди рд╣реЛред (рдпрд╛рдиреА рдпрд╣ рдмреЗрд╣рддрд░ рдЧреИрд░-рдХреНрд░рд┐рдпрд╛ рдмрд╛рдЗрдирд░реА рдирд╛рдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред)рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ:
https://github.com/fabric/fabric/issues/565#issuecomment -4095609
intern
рднреА рдПрдХ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдмрдврд╝рд┐рдпрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред
@dstufft рддреЛ рдпрд╣ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдмрд╛рдЗрдирд░реА рдирд╛рдо рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрд╛, boss docs
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реИред
@kennethreitz рдиреЗ рдЖрдИрдЖрд░рд╕реА рдкрд░ bake
рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдореЗрдХ/рд░реЗрдХ рдереАрдо рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдЖрд╣реНрд╡рд╛рди рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП $ bake docs
, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд┐рд╖рдпрдЧрдд рд░реВрдк рд╕реЗ рдпрд╣ рдереЛрдбрд╝рд╛ рджреВрд░ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ' рдбреА рд╢реЗрдл рдпрд╛ рдХреБрдЫ рдФрд░ рдореЗрдВ рдмреЗрд╣рддрд░ рдлрд┐рдЯред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: deliver
рднреАред рдЗрд╕ рдкрд░ рдореЗрд░реА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреБрдЫ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдереА ( $ deliver build
$ deliver docs
) рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ _great_ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд╛рдо рдирд╣реАрдВ рд╣реИ рдЬреЛ рдереЛрдбрд╝рд╛ рдмрд╣реБрдд рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рдереЛрдбрд╝рд╛ рд▓рдВрдмрд╛ рд╣реИред
$ invoke taskname
(рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд╛рдо: invoker
, invoked
, ???)
рдЖрд╣реНрд╡рд╛рди рдХрд┐рдпрд╛ред
рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Invoked рдФрд░ invoke docs
invoke tests
invoke publish
рдЖрджрд┐ рдкрд╕рдВрдж рд╣реИрдВред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд╛рдо рд╕рд┐рд░реНрдл "рдЖрдордВрддреНрд░рдг" рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпрд╛ рдмрд╛рдЗрдирд░реА рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд╛рдореЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 'рдЖрд╣реНрд╡рд╛рди' рдореЗрдВ 'рдЖрд╣реНрд╡рд╛рди' рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдкрд┐рдЬреНрдЬрд╛рдЬрд╝ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдирд╛рдо рдХрд╛ рдЕрд▓рдЧ рд╣реЛрдирд╛ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИ, рдирд╣реАрдВ, рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдХрдИ рдмрд╛рд░ рдпрд╣ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рдЯреНрд░реЗрди рдореЗрдВ рдЪрд▓рддреЗ рд╕рдордп рдореЗрд░реЗ рдорди рдореЗрдВ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ (рдЕрдм рдЙрдХреНрдд рдЯреНрд░реЗрди рдореЗрдВ :P go go Smartphone tethering!) рдЬреЛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо _рд╕рдВрднрд╡рддрдГ рдпрд╣ рд╕рдм рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╕ рдкреВрд░реЗ fab
+ fabfile.py
рд╕рд╛рдЗрдб рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕ "рдирдИ" рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЪреАрдЬрд╝реЗрдВ (рдФрд░ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ, рдХрд╣реЗрдВ, fabricator
)ред
рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рд▓рд┐рдм рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдФрд░ рдПрд╕рдПрд╕рдПрдЪ-рдЙрдкрдпреЛрдЧ рд╕реЗрдЯрдЕрдк рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╣реЛрдирд╛ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдПрдХ рдиреБрдХрд╕рд╛рди рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдкреНрд▓рд╕рд╕:
рдорд╛рдЗрдирд╕:
pip install fabricator
рд╣рдореЗрдВ fab
рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЭрдВрдбреЗ рдХреЗ рдХреБрдЫ рдЫреЛрдЯреЗ рд╕реЗрдЯ рд╣реЛрдВрдЧреЗpip install fabric
, рддреЛ рдЕрдЪрд╛рдирдХ рдЙрд╕реА fab
рдХреЛ рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдлреИрдмреНрд░рд┐рдХ рд╕реАрдПрд▓рдЖрдИ рдЭрдВрдбреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ, рдпрджрд┐ рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рднреА рдирд╣реАрдВ рд╣реИрдВрдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рдмрди рд╕рдХрддрд╛ рд╣реИред рджреЗрдЦреЗрдВ рдХрд┐ рдХреИрд╕реЗ рдирд╛рдХ рдЕрдкрдиреЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЯреВрд▓ рд╕реЗ рдкреНрд▓рдЧрдЗрди рдПрдВрдЯреНрд░реАрдкреЙрдЗрдВрдЯ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реЛрдЧреА рдЪрд╛рд╣реЗ рд╡рд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдПред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд╛рдо рднреНрд░рдо рдПрдХ рдореБрджреНрджрд╛ рд╣реЛрдЧрд╛ред
рдпрд╣ рдПрдХ рдирд┐рдЬреА рдмрд╛рдд рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ invoke test
invoke docs
рд╕реЗ рдмреЗрд╣рддрд░ fab test
рдХрд╛ рд▓реБрдХ рдкрд╕рдВрдж рд╣реИред
рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдЬрд╛рддреЗ рд╣реИрдВ, рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреЛрд░ рдмрд╛рдЗрдирд░реА (рдЗрдирд╡реЛрдХ) рд╕рднреА рдлреИрдмреНрд░рд┐рдХ рдЪреАрдЬреЛрдВ рдХреЛ рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рд╣реИ, рдФрд░ рдлрд┐рд░ рдлреИрдм рдХреЛ рдЙрд╕реА рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯ рдХреЛ рдЗрдирд╡реЛрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░реЗрдВ (рдпрд╛рдиреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлреИрдм/рдЗрдирд╡реЛрдХ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ main()
(рдпрд╛ рдЬреЛ рдХреБрдЫ рднреА) рдХреЗ рдЕрд▓реНрдЯреНрд░рд╛ рдиреНрдпреВрдирддрд░ рдХреЙрд▓рд░реНрд╕ рд╣реЛрдВрдЧреЗред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк рдЗрдирд╡реЛрдХ + рдлреИрдмреНрд░рд┐рдХ рд░реВрдЯ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ 2.0 рд╕реЗ рдкрд╣рд▓реЗ рдлреИрдмрдлрд╛рдЗрд▓реНрд╕ рдФрд░ "рдЗрдирд╡реЛрдХрдлрд╛рдЗрд▓реНрд╕" рджреЛрдиреЛрдВ рд╣реИрдВ? рд╕рдорд░реНрдерд┐рдд рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ 2.0 рдХреЗ рд╕рд╛рде рдмрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░реЗрдВ?
рддреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдореИрдВ рдЗрд╕реЗ рдЕрд▓рдЧ "рдЯрд╛рд╕реНрдХ рд░рдирд░" рдФрд░ "рд░рд┐рдореЛрдЯ/рдПрд╕рдПрд╕рдПрдЪ рд╕реНрдЯрдл" рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП +1 рд╣реВрдВ, 1.x рдХреЗ рд▓рд┐рдП рдХреЙрдореНрдкреЗрдЯ рд╢рд┐рдо рдореЗрдВ рдбрд╛рд▓ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ 2.x рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рди рдХреЛ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рднрд╛рдЬрди рджреЛрдиреЛрдВ libs рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛ рджреЗрдЧрд╛, рдХрд╛рд░реНрдп рдзрд╛рд╡рдХ рдХреБрдЫ рд╡рд╛рдХрдИ рдЕрдЪреНрдЫреА рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдЧрд╛ (рдФрд░ рд╢рд╛рдпрдж рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп рдЬрд┐рдиреНрд╣реЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдирд┐рд░реНрднрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рджреМрдбрд╝рд╛ рдЖрджрд┐)ред рдФрд░ рд░рд┐рдореЛрдЯ/рдПрд╕рдПрд╕рдПрдЪ рд╕рд╛рдорд╛рди рдХреЛ рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕реЗрдЯ рд╣реЛрдиреЗ рд╕реЗ рд▓рд╛рдн рд╣реЛрдЧрд╛ рдЬрд┐рд╕рд╕реЗ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ/
рдореЗрд░реЗ рд╕реЗрдВрдЯ рд╡реИрд╕реЗ рднреАред
рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореИрдВ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдирдлрд░рдд рдирд╣реАрдВ рдХрд░рддрд╛, рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдпрд╣ рдЪрд░реНрдЪрд╛ рдмрд┐рд▓реНрдХреБрд▓ рд╣реЛ рд░рд╣реА рд╣реИ :)
@dstufft рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдЙрд╕ рд╕рдм рд╕реЗ рдХрд╛рдлреА рд╕рд╣рдордд рд╣реВрдВред рдЖрдк рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд┐рд░реНрдл рд╕реНрдЯрдмреНрд╕ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╣реА рд╣реИрдВ, рдЗрд╕ рддрд░рд╣ рдлреИрдмреНрд░рд┐рдХ рдЕрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореЗрд░реА рдЪрд┐рдВрддрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рднреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред
@dcolish рдореЗрд░рд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рдерд╛ рдХрд┐ рд╕реАрдПрд▓рдЖрдИ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдирд╛рдХ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рдкреВрд░реНрд╡ рдХрд▓рд╛ рд╣реИред
рдЕрдЧрд░ рд╣рдо "рдЖрд╣реНрд╡рд╛рди" рдХреЗ рд╕рд╛рде рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╢рд╛рдпрдж рдлрд╝рд╛рдЗрд▓ рдирд╛рдо invocations(.py)
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг/рдереАрдордкрд╛рд░реНрдХ рдкрдХреНрд╖ рдкрд░ рдПрдХ рд╕реНрдкрд░реНрд╢, рд▓реЗрдХрд┐рди рдпрд╣ рд╡реНрдпрд╛рдХрд░рдгрд┐рдХ рд░реВрдк рд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рдФрд░ invokefile.py
рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред рдпрд╛ рд╕рдВрднрд╡рддрдГ рд░реЗрдХ рд╕рдореНрдореЗрд▓рди рдорд╛рд░реНрдЧ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдХреЗрд╡рд▓ tasks(.py)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓/рдлрд╝реЛрд▓реНрдбрд░ рдкрд╣рд▓реВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪреВрдВрдХрд┐ рдпрд╣ рдЬрд╕реНрдЯ рдкрд╛рдпрдерди рд╣реИ рдпрд╛ рддреЛ рдЕрднреА рднреА рд╕рдорд░реНрдерд┐рдд рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╕рд╛рдордЧреНрд░реА рдФрд░ рдбреЙрдХреНрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, invocations/__init__.py
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдирд╛ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реЛ рд╕рдХрддреА рд╣реИред
рдореБрдЭреЗ tasks.py
рдкрд╕рдВрдж рд╣реИред invocations.py
рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЬреАрдм рд╣реИред
рд╡реИрд╕реЗ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдмрд╣реБрдд рдмрд╛рд░ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд╣реИ рдирд╛? ;) рд▓реЗрдХрд┐рди рд╣рд╛рдБ, tasks/
рдпрд╛ tasks.py
рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдХреБрдЫ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИред
рдЯрд╛рд╕реНрдХрдлрд╛рдЗрд▓.py
рдЖрдк invoke
рдХрд╛рд░реНрдп (.py|/), рд╢рдмреНрджрд╛рдВрдХрди рд╡реИрд╕реЗ рднреА рдЕрдЪреНрдЫрд╛ рд╣реИ :)
рд╣рд╛рдВ, "рдпреЗ tasks
рд╣реИрдВ, рдЬрд┐рд╕реЗ рдЖрдк invoke
" рд╕реЗрдЯрдЕрдк рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЕрдВрдЧреНрд░реЗрдЬреА рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдХреАрд╡рд░реНрдб рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдХреЛрдИ рддрд╛рдордЭрд╛рдо рдирд╣реАрдВ, рдХреЛрдИ рджрдВрдн рдирд╣реАрдВ, рдЖрджрд┐ред
@kennethreitz рдореИрдВрдиреЗ рдХрднреА рднреА рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рди рдХреЗ рд░реВрдк рдореЗрдВ XYZFile рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрди рджрд┐рдиреЛрдВ рд╕реЗ рдпрд╣ рдЕрдХреНрд╕рд░ _not_ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдореБрдЭреЗ рдлреИрдм 1.x рдХреЗ рдмрд╛рд╣рд░ рд╕рдореНрдореЗрд▓рди рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ :)
рдореИрдВ рдРрд╕рд╛ рд╣реЛрддреЗ рджреЗрдЦрдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рдореИрдВрдиреЗ рд╣рдореЗрд╢рд╛ рдлреИрдмреНрд░рд┐рдХ рдХреЛ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП "рдХрд╛рд░реНрдпреЛрдВ" рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рдЗрдереЛрдирд┐рдХ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рд╣реИ, рдЪрд╛рд╣реЗ рд╡реЗ рд╕реНрдерд╛рдиреАрдп рдпрд╛ рд░рд┐рдореЛрдЯ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдВ, рд░реЗрдХ/рдореЗрдХ рдХреЗ рдХрд░реАрдм рдХреБрдЫред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рдирдП рд▓реЛрдЧреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрдп рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЧрдИ, рддреЛ рдХрдИ рд▓реЛрдЧ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рднреНрд░рдорд┐рдд рдереЗ рдФрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ред
рдореИрдВ рдореЙрдбреНрдпреВрд▓/рдлрд╝реЛрд▓реНрдбрд░ рдкрд╣рд▓реВ рдХреЛ рджреВрд╕рд░реЗ рд╕реНрдерд╛рди рдкрд░ рд░рдЦреВрдВрдЧрд╛, рддрд╛рдХрд┐ рдбреНрд░реЙрдк-рдЗрди рд╕рдХреНрд╖рдо рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдирдИ рд╢реИрд▓реА рдХреЗ рдХрд╛рд░реНрдп рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрд╕ рдУрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рд░рд╛рд╕реНрддрд╛ рддрдп рдХрд░рддреЗ рд╣реИрдВред
@askedrelic рд╣рд╛рдБ, рдпрд╣ рджреЛ-рдПрдХ-рдПрдХ рд╣реЛрдирд╛ рд╣рдореЗрд╢рд╛ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд░рд╣рд╛ рд╣реИред
рдЕрд╕рдВрдмрдВрдзрд┐рдд: рдореИрдВ рдЗрд╕ рд╕реВрддреНрд░ рдкрд░ @tswicegood рдХреЛ рд╕рдорди рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рдФрд░ рдореИрдВ рдХреБрдЫ рд╕рдкреНрддрд╛рд╣ рдкрд╣рд▓реЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рдереЗ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдореИрдВ рдЕрд╕рд╣рдордд рд╣реЛрдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрддрд╛ рд╣реВрдВ;)
рдореБрдЭреЗ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛? :-)
рдореБрдЭреЗ $#$1 fabfile
#$ рдХреЗ рдмрдЬрд╛рдп рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ tasks
рдкрд░ рдЬрд╛рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИред рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдФрд░ рдЫреЛрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред рдореИрдВ, рдПрдХ рдХреЗ рд▓рд┐рдП, рдЖрд░реНрдорд╕реНрдЯреНрд░рд╛рдВрдЧ рдХреЗ рдЕрдВрджрд░ fab test
рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдбрд┐рдкреЛ рд╕реНрдЯреИрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдирдлрд░рдд рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рднреА рдЬреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рдмрдбрд╝рд╛ рдкреНрд▓рд╕ рд╡рди рд╣реВрдВред
рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдирд╛рдордХрд░рдг рд╣реИ, рдмрд╛рд╣рд░реА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╣реЛрдиреЗ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ рдЬреЛ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕реЗ рдиреАрдЪреЗ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
if __name__ == "__main__":
<some_mod>.main()
рддреЛ рдЖрдк рдмрд╕ рдкрд╛рдпрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдореИрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реВрдВ, рдмрд╕ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдпрд╛ рдирд╣реАрдВред
рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдореИрдВрдиреЗ рдХреБрдЫ рд╣рдлреНрддреЗ рдкрд╣рд▓реЗ flunky
рдирд╛рдордХ рдкреИрдХреЗрдЬ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рдХреА рдереАред рдЙрд╕ рдкрд░рд┐рдЪрд░ рд╡рд┐рд╖рдп рдХреЗ рд╕рд╛рде рдЪрд┐рдкрдХреЗ рд╣реБрдП, footman
рдпрд╛ lacky
рджреЛрдиреЛрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ (рдмрд╛рдж рдореЗрдВ lackie
- рдПрдХ рд░реВрдмреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рд╣реИ)ред рджреВрд╕рд░рд╛ рд╢реБрдХреНрд░рд╡рд╛рд░ рд╣реЛрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд▓рдбрд╝рдХреА/рдкреБрд░реБрд╖ рд╢реБрдХреНрд░рд╡рд╛рд░ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЧрд┐рдЯрд╣рдм/рдкреАрдИрдкреАрдЖрдИ/рд╣реЛрдордмреНрд░реВ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХрд╛ рдирд╛рдо рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рджрд░рдЕрд╕рд▓, рдЕрдм рдЬрдм рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдореЗрд░реА рдкрд╣рд▓реА рдкрд╕рдВрдж рд╣реЛрдЧреАред
рд╕рд╛рдЗрдб рдмреЗрдЯ, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЬрдм рддрдХ @niran рдиреЗ рдПрдХ рдкреАрдЖрд░ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛, рддрдм рддрдХ рдпрд╣ рд╕реНрдкрд╖реНрдЯ, рдпрджреНрдпрдкрд┐ рднрдпрд╛рдирдХ рдереАрдо рдЧреАрдд рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП README рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд░рд╣рд╛ рдерд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдСрди-рдпреЛрд░- $PATH
"рдмрд╛рдЗрдирд░реА" (espред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ _not_ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрд╛рдЗрдирд░реА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдПрдХ рд╕реЗрдЯрдкреВрд▓-рдирд┐рд░реНрдорд┐рдд рд╕реНрдЯрдм рд╣реИ рдЬреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ (invoked|fabric).main()
) рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реИ , рдФрд░ рдореБрдЭреЗ рдЙрд╕ рд╕реНрдЯрдм рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХрд╛рд░реНрдп рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░ рд╕реНрд╡рдд: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд▓рд╛рдн рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ (рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдореЗрдВ рдХрдИ рдбрд╛рдЙрдирд╕рд╛рдЗрдбреНрд╕ рджреЗрдЦреЗрдВред)
рдФрд░ рд╣рд╛рдВ, рдЗрд╕рдХрд╛ рдкреВрд░рд╛ рдмрд┐рдВрджреБ рдПрдХ рдРрд╕реЗ рдХрд╛рдо рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдирд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдПрд╕рдПрд╕рдПрдЪ/рдиреЗрдЯрд╡рд░реНрдХ/рдХреНрд░рд┐рдкреНрдЯреЛ рдбрд┐рдкреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдХрд╛рд░реНрдпрдкреВрд░реНрдг рд╕рд╛рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ :)
рдореИрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдкрд░ @bitpropet рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдВред рдЗрд╕рд╕реЗ рджреМрдбрд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╣реЛрддреА рд╣реИред рдЕрдЧрд░ рдХреЛрдИ рдЕрдкрдиреА рдирд┐рдЬреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ invoke
/ fab
рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рддреЛ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЖрдзрд╛рд░ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдмрд╛рдЗрдирд░реА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ finalname.__main__.main
рдкрд░ рд░рд╣ рд╕рдХрддрд╛ рд╣реИ , рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк рднреА рдХреЗрд╡рд▓ python -m finalname
рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+1ред
рдмрд╕ рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╡рд╣рд╛рдБ рдлреЗрдВрдХ рд░рд╣рд╛ рд╣реВрдБ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рднреА рд╣реИред рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдпрджрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдореИрдВрдиреЗ рд╢реБрдХреНрд░рд╡рд╛рд░ рдХреЛ рдкреАрдИрдкреАрдЖрдИ рдкрд░ рдкрдВрдЬреАрдХрд░рдг рдХрд░рд╛рдпрд╛ред
@bitpropet рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдЖрдк рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред рдореИрдВ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ, рдирд╛рдХ рдХреЗ рд╕рдорд╛рди рдПрдХ рдлреИрд╢рди рдореЗрдВ рдлреНрд░рдВрдЯрдПрдВрдб рдХрд░рдиреЗ рдФрд░ рдирд╛рдо рдХреЛ рдлреИрдм рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдорддрджрд╛рди рдХрд░ рд░рд╣рд╛ рдерд╛ред
рд╡рд┐рдЪрд╛рд░ рдорд╣рд╛рди рд╣реИрдВ, рдореБрдЭреЗ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИрдВ :)
рд╢реБрдХреНрд░рд╡рд╛рд░ рдХрд╛ рджрд┐рди рдереЛрдбрд╝рд╛ рдмрд╣реБрдд рдкреНрдпрд╛рд░рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдкреЙрдк рд╕рдВрд╕реНрдХреГрддрд┐ рд╕рдВрджрд░реНрдн рдкрд╕рдВрдж рд╣реИред рд╡рд╣ рдЧрд╛рдирд╛ рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рд╣реИ! :рдЯреНрд░реЙрд▓ рдлрд╝реЗрд╕:
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВ рдкреИрдХреЗрдЬ/рдкреНрд░реЛрдЬреЗрдХреНрдЯ, рдФрд░ рдмрд╛рдЗрдирд░реА, рдирд╛рдо рджреЛрдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реАрдзреЗ invoke
рдХреЗ рд╕рд╛рде рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдпреЛрдЗрдВрдХ! Invoker рдпрд╛ Invoked рдкреВрд░реНрд╡ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рдереАрдВ (рдпрд╛рдиреА рдЕрднреА рднреА invoke
рдмрд╛рдЗрдирд░реА рдХреЗ рд╕рд╛рде) рд▓реЗрдХрд┐рди рдореИрдВ рд╕реАрдзрд╛ рдорд╛рд░реНрдЧ рдирд╣реАрдВ рдЬрд╛рдиреЗ рдХреЗ рдХрд┐рд╕реА рднреА рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрд╛ред
рдЗрд╕ рдирд╛рдо рдХрд╛ рдореБрдЦреНрдп рдкрд╣рд▓реВ рд╕рд╛рдорд╛рдиреНрдпрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рд░ рдЙрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдХрднреА рд▓рд┐рдпрд╛ рд╣реИ рдпрд╛ рдмрдирд╛рдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдореБрдЭреЗ рд╕рд╣реА рдирд╣реАрдВ рд▓рдЧрд╛ред /рдФрдЪрд┐рддреНрдп
@dcolish рдиреЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛, рдзрдиреНрдпрд╡рд╛рдж!
рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдХреЛрдИ рдЕрдВрддрд┐рдо рдирд┐рд░реНрдгрдп рдирд╣реАрдВ рд▓рд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдордп рд╕рдордЭрджрд╛рд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдпрд╣ рд╣реИ:
invoke
рдмрд╛рдЗрдирд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, tasks
рдореЙрдбреНрдпреВрд▓ рдХреА рддрд▓рд╛рд╢ рдХрд░рддрд╛ рд╣реИ, рдЖрджрд┐редfab
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ рдФрд░ fabfile
рдореЙрдбреНрдпреВрд▓ рдХреА рддрд▓рд╛рд╢ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЗрдирд╡реЛрдХ рдкрд░ рдЗрдВрд╕реНрдЯреЙрд▓-рдЯрд╛рдЗрдо рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕ рд╕рд╛рдЭрд╛ рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирд╡реЛрдХ рдХреЗ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИinvoke
/ tasks
рдореМрдЬреВрдж рд╣реИрдВ/рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ' d рдХрднреА рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ -- fab
рдЕрднреА рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдПрдХ рд╕реБрдкрд░рд╕реЗрдЯ рд╣реИредinvoke
рдФрд░ fabric
рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ . рдЗрди рд▓реЛрдЧреЛрдВ рдХреЛ invoke
рдФрд░ fab
рдореЗрдВ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рдзрд╛рд░рдг рдЙрдкрдирд╛рдо рд╣реЛрдиреЗ рдореЗрдВ рдХреБрдЫ рд░реБрдЪрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ (рдпрд╛рдиреА рдлреИрдмреНрд░рд┐рдХ рдХреЗ рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реЛрдиреЗ рд╕реЗ invoke
рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдирд╛рдХ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред)fab
_must_ рдЕрдВрддрд░ _at рдХрдо рд╕реЗ рдХрдо_ рдореЗрдВ "рдореИрдВ рдХрд┐рд╕ рдХрд╛рд░реНрдп рдореЙрдбреНрдпреВрд▓ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ?" рдЕрд░реНрде, рдХрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рд╣рдо рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ рдкреНрд░рд╛рдгреА рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлреИрдмреНрд░рд┐рдХ рдФрд░ рдЗрдирд╡реЛрдХ рдХреЗ рдмреАрдЪ рдХрд╛ рд╕рдВрдмрдВрдз рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рдд рдореЗрдВ рд╣реИ рдХрд┐ рдлреИрдмреНрд░рд┐рдХ рдЗрдирд╡реЛрдХ рдХреЗ рдХреЛрдбрдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИредрд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореБрдЭреЗ рдХреБрдЫ рднреА рдЕрдВрддрд┐рдо рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ _how_ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреА рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдЬрд▓реНрджреА рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЕрднреНрдпрд╛рд╕ рдмрдирд╛рдо рд╕рд┐рджреНрдзрд╛рдВрдд рдФрд░ рд╡рд╣ рд╕рдмред рдХреЛрдгреЛрдВ рдореЗрдВ рднрд╛рдЧ рд╕рдХрддрд╛ рд╣реВрдБ рдореИрдВ рдпрд╣рд╛рдБ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдБред
рдЗрдирд╡реЛрдХ рдореЗрдВ рдЕрдм рдмреАрдЯрд╛ рд░рд┐рд▓реАрдЬ рд╣реИ (рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд╛рдо рдХреЗ рдмрд╛рдж)ред рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж:
foo:bar,lol
, рдЬрд┐рд╕рдореЗрдВ рд╕реАрдПрд▓рдЖрдИ рд╕реНрдкреЗрдХ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди argspec рдХрд╛ рдСрдЯреЛ рдЕрдиреБрд╡рд╛рдж рд╢рд╛рдорд┐рд▓ рд╣реИrun
(рдпрджреНрдпрдкрд┐ рд╢рд╛рдпрдж рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдирд╣реАрдВ рд╣реИ)рдЗрд╕ рдкрд░ рджреМрдбрд╝рдирд╛ рдФрд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рдирд╛ рдХрд┐ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдлреИрдм 2 рдЗрд╕ рдкрд░ рдХреИрд╕реЗ рдмреЛрд▓реНрдЯ рд▓рдЧрд╛рдПрдЧрд╛ред
рд╕реНрд╡рдЪреНрдЫ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд┐рд░реНрдорд╛рдг
"рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ" "рд░рд╛рдЬреНрдп"
рдлреИрдмреНрд░рд┐рдХ 2 рдХреА рдХреНрдпрд╛ рд╕реНрдерд┐рддрд┐ рд╣реИ? рдХреНрдпрд╛ рд╡рд╣рд╛рдВ рдХреЛрдИ рдХрд╛рдВрдЯрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдврдХ рд░рд╣рд╛ рд╣реИ? рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╡рд╣ рд╕рд╛рдорд╛рди рдЬреЛ рдлреИрдмреНрд░рд┐рдХ 2 рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдХрд┐ рдЖрд╣реНрд╡рд╛рди рдирд╣реАрдВ рд╣реИред
@mvaled рдпрд╣ рдЬрд▓реНрдж рд╣реА рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдХрдкрдбрд╝реЗ рд░реЗрдкреЛ рдХреА рдПрдХ рдирд┐рдЬреА 'рд╕рд╛рдл' рд╢рд╛рдЦрд╛ рдореЗрдВ рд░рд╣рд╛ рд╣реИред
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рд╡рд┐рд╖рдп рд╕реЗ рд╣рдЯрдХрд░ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рдкреВрдЫрдирд╛ рд╣реИ:
рдореБрдЭреЗ рдлреИрдмреНрд░рд┐рдХ 2 рдХрд╣рд╛рдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ?
рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╣реНрд╡рд╛рди рдкрд╕рдВрдж рд╣реИ рдФрд░ рдпрд╣ рдПрдХ рдмрдбрд╝реЗ рд╕реБрдзрд╛рд░ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЖрд╣реНрд╡рд╛рди 1.0 рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЧреБрдо рд╣реИ? (рдХрдкрдбрд╝реЗ 2 рдХреЗ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд)
рдЗрдирд╡реЛрдХ рдФрд░ рдлреИрдмреНрд░рд┐рдХ рдкрд░ рд╕рднреА рдорд╣рд╛рди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
@dmr рдореИрдВ рдЗрдирд╡реЛрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдлреИрдмреНрд░рд┐рдХ 2 рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдореЗрдВ рд╣реВрдВред рдлреИрдмреНрд░рд┐рдХ 1 рд╕реЗ рдкреЛрд░реНрдЯ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдЗрдирд╡реЛрдХ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдирд┐рд░реНрдгрдпреЛрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░реЗрдЧрд╛ (рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдпрд╛ рдореМрдЬреВрджрд╛ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣рд╛рд▓рд┐рдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдУрд╡рд░рд╣рд╛рд▓ рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рдерд╛), рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрдирд╡реЛрдХ 1.0 рдХреЛ рддрдм рддрдХ рд▓реЗрдмрд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ " рд▓рдбрд╝рд╛рдИ рдХрд╛ рдкрд░реАрдХреНрд╖рдг" рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗред
рдореЗрд░реА рдпреЛрдЬрдирд╛ рд╣реИ рдХрд┐ рдкрд╛рдпрдХреЙрди рджреНрд╡рд╛рд░рд╛ рдЬрдирддрд╛ рдХреЗ рд▓рд┐рдП рдирд╡реАрдирддрдо (рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдЬрд▓реНрдж) рдлреИрдмреНрд░рд┐рдХ 2 рдХрд╛ рдЕрд▓реНрдлрд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдЗрд╕рд╕реЗ рдлреИрдмреНрд░рд┐рдХ 2.0 + рдЗрдирд╡реЛрдХ 1.0 рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдХрд╣рд╛рдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?
рдореИрдВ рдЗрд╕ рдкрд░ рдЕрд▓реНрдкрд╛рд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдЬреА рд╢рд╛рдЦрд╛ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрдм рддрдХ рдХрд┐ рдореБрдЭреЗ рдХреБрдЫ рдРрд╕рд╛ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдЦреБрд╢ рд╣реВрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЯреНрд╡рд┐рдЯрд░/рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА/рдЖрджрд┐ рдкрд░ рдШреЛрд╖рдгрд╛ рдХрд░реВрдВрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рдмрдиреЗ рд░рд╣реЗрдВред
рдореИрдВрдиреЗ рд╢реЗрд▓ рдХрдорд╛рдВрдб рдФрд░ рдХреБрдЫ рдкреИрд░рд╛рдореАрдХреЛ рдХреЗ рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдЗрдирд╡реЛрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдлреИрдмреНрд░рд┐рдХ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ python3 рд╕рдорд░реНрдерди рдХреЗ рдмрд┐рдирд╛ рдЕрдВрддрд┐рдо рдкреИрдХреЗрдЬ рд╣реИ
рдлреИрдмреНрд░рд┐рдХ 2.0 рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдИрдЯреАрдП рдФрд░ 1.0 рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рдпрдерди 3.5 рдХрд▓ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЙрдмрдВрдЯреВ 16.04 рдПрд▓рдЯреАрдПрд╕ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдЧрд╛?
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдлреИрдмреНрд░рд┐рдХ 2.0 рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдИрдЯреАрдП рдФрд░ 1.0 рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рдпрдерди 3.5 рдХрд▓ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЙрдмрдВрдЯреВ 16.04 рдПрд▓рдЯреАрдПрд╕ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдЧрд╛?