рд╣реИрдХрд┐рдВрдЧ maya
рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдмрдХ рд╕реАрдЦреЗ рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкрд╛рдЗрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ pipenv
рдХреЗ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдЙрдкрдпреЛрдЧ рдХрд╛ рдореЗрд░рд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╕реНрддрд╛рд╡ рдЖрдпрд╛ред рдореИрдВ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рд╕реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрджрд┐ рд╣рдо рд╕рд╣рдорддрд┐ рдкрд░ рдкрд╣реБрдВрдЪ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ (рдЕрдкрдбреЗрдЯреЗрдб) рдЯреЗрдХреНрд╕реНрдЯ pipenv
рдбреЙрдХреНрд╕ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
pipenv
рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдкреИрдЯрд░реНрди рдФрд░ рдПрдВрдЯреАрдкреИрдЯрд░реНрдирд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдорд╛рдиреНрдп (рдЬреНрдпрд╛рджрд╛рддрд░ рдУрдкрди рд╕реЛрд░реНрд╕) рдкрд╛рдпрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд▓рд╛рдЧреВ рд╣реИ, рдЬреЛ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдФрд░ рдУрдПрд╕ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВред рд╕рдЦреНрдд рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╛рдорд▓реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рд╡реИрд╕реЗ рднреА рд╕рднреА рд╕рдорд╕реНрдпрд╛ рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ)ред
рд╕рдВрдкрд╛рджрди рдХрд╛ рдЕрдВрдд
TL; DR : рдЕрдЬрдЧрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ pipenv
рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрдЯрд┐рд▓рддрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реБрд░рдХреНрд╖рд╛ рдореЗрдВ рдХреБрдЫ рднреА рди рдЬреЛрдбрд╝рддреЗ рд╣реБрдП рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЫрд┐рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, Pipfile
, Pipfile.lock
рдФрд░ .env
рдХреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрд░реЛрдд рдирд┐рдпрдВрддреНрд░рдг рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦреЗрдВред
.gitignore
рдореЗрдВ рд░рд╣рдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдЖрдк pipenv
рдХреА рдкреВрд░реА рд╢рдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред
рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ, рдЬрд┐рд╕рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ setup.py
, рдЬрд┐рд╕реЗ рдкрд╛рдЗрдерди рд╕рдВрд╕реНрдХрд░рдг рдФрд░/рдпрд╛ рдУрдПрд╕ рдореЗрдВ рднрд┐рдиреНрди рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рд╡рд┐рддрд░рдг рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг maya
, requests
, flask
рдЖрджрд┐ рд╣реИрдВред
рджреВрд╕рд░реА рддрд░рдл (рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд╣реАрдВ) рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╛рдпрдерди рджреБрднрд╛рд╖рд┐рдпрд╛, рдУрдПрд╕ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВ рдФрд░ рдЕрдХреНрд╕рд░ рд╕рдЦреНрддреА рд╕реЗ рд╕рдВрдЧрдд рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рддреИрдирд╛рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред
pipfile
рдкрд┐рдкрдлрд╛рдЗрд▓ рдмрдирд╛рдо setup.py рдореЗрдВ рдЗрди рдЕрдВрддрд░реЛрдВ рдХрд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред
pipenv
рдХреНрдпрд╛ рд╣реИ (рддреИрдирд╛рддреА рдЙрдкрдХрд░рдг)рдореИрдВ рдЗрд╕ рдХрдерди рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдВ, рдХрд┐ pipenv
рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдЙрдкрдХрд░рдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
Pipfile.lock
) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдпрд╣ рддрдм рдорджрдж рдХрд░рддрд╛ рд╣реИ рдЬрдм рдХрд┐рд╕реА рдХреЛ рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреИрдирд╛рдд рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╣реА рд╕реБрд╕рдВрдЧрдд рдкрд╛рдпрдерди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИред
pipenv
рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬрд┐рдВрдЧ рдЯреВрд▓ рднреНрд░рд╛рдордХ рд╣реИ рдпрджрд┐ рдХреЛрдИ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╛рдпрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдиреЗ рдпрд╛ рдЙрдирдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рдВ, pipenv
рдмрд╣реБрдд рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд╛рд╕ рдореЗрдВ) рд▓реЗрдХрд┐рди рд╕рдВрднрд╡рддрдГ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЕрдХреНрд╕рд░ рд╕реАрдЖрдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЬрдм рдЧрд╣рди рд╡рд┐рдЪрд╛рд░ рдХреЗ рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рдЯреАрдПрд▓; рдбреАрдЖрд░ : pipenv
Pipfile.lock
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЕрдиреБрдореЛрджрд┐рдд рдареЛрд╕ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХреЗрд╡рд▓ рдЕрдореВрд░реНрдд рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ (рдЗрд╕ рдкреНрд░рдХрд╛рд░ Pipfile.lock
рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛)ред
pipenv
рдЗрди рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдЪрдордХрддрд╛ рд╣реИ:
Pipfile
)Pipfile.lock
Pipfile.lock
рдХреЛ рдЬрд╛рд░реА рдХрд░реЗрдВpipenv sync
рдХрд╛ рдЙрдкрдпреЛрдЧ "рдЧреЛрд▓реНрдбрди" Pipfile.lock
рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ рдФрд░ рд╕рдорд╛рди рдЕрдЬрдЧрд░ рд╡рд╛рддрд╛рд╡рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдкрд╛рдпрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рде рдРрд╕реА рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдареЛрд╕ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ред рдЗрд╕ рдирд┐рдпрдо рдХреЛ рддреЛрдбрд╝рдирд╛ (рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЕрдЬрдЧрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреНрд╡рд╛рд░рд╛ рдареЛрд╕ рдирд┐рд░реНрднрд░рддрд╛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕) рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ рдЬреИрд╕реЗ:
setup.py
рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЫрд┐рдкрд╛рдирд╛setup.py
install_requires
рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рднреА рдЕрдореВрд░реНрдд рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдЧрд╛ред
рдпрджрд┐ Pipfile
рдЙрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЫрд┐рдкрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ:
install_requires
рдореЗрдВ рд▓рд╛рдкрддрд╛ рдирд┐рд░реНрднрд░рддрд╛Pipfile
рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рдпрдореЛрдВ (рд╕рдВрд╕реНрдХрд░рдг рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдЖрджрд┐) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ install_requires
рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИредрдЗрд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрди рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ:
Pipfile
рдореЗрдВ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП[packages]
рдЕрдиреБрднрд╛рдЧ Pipfile
рдпрд╛ рддреЛ рдЦрд╛рд▓реА рд╣реЛрдЧрд╛ рдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдЧрд╛редPipfile.lock
рднрдВрдбрд╛рд░ рдореЗрдВрдкреБрд╕реНрддрдХрд╛рд▓рдп рднрдВрдбрд╛рд░ рдореЗрдВ Pipfile.lock
(рдЖрдорддреМрд░ рдкрд░ "рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ") рд░рдЦрдирд╛ рдЧрд▓рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐:
рдЗрд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдХреЛ рдЪрд╛рд╣рд┐рдП:
Pipfile.lock
рдирд┐рдХрд╛рд▓реЗрдВ рдФрд░ рдЗрд╕реЗ .gitignore
tox
рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ ( usedevelop
рдЫрд┐рдкрд╛рдирд╛)рдпрджрд┐ tox.ini
рдореЗрдВ рдЗрд╕рдХреЗ commands
рдЕрдиреБрднрд╛рдЧ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреИрд╕реЗ:
pipenv install
pipenv install --dev
pipenv lock
рдпрд╣ рдЕрдХреНрд╕рд░ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐:
pipenv install
рдХреЗрд╡рд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛, рдФрд░ tox
(рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ) рдЗрд╕реЗ рднреА рдХрд░ рд░рд╣рд╛ рд╣реИред рджреЛрд╣рд░реЗрдкрди рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ usedevelop=True
рдФрд░ usedevelop=False
рдХреЛ tox.ini
рд░реЛрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ Pipenv
рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ (рдФрд░ tox.ini
рд╡рд┐рднрд┐рдиреНрди рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдореЗрдВ рдЕрдВрддрд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ)редрдЗрд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдХреЛ рдЪрд╛рд╣рд┐рдП:
pipenv
рдореЗрдВ tox.ini
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреБрд░реЛрдз рджреЗрдЦреЗрдВ pipenv
рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдирд┐рд░реНрдорд╛рдг рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИpipenv
рднрд╛рд░реА рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдзреАрди рд╣реИ рдФрд░ рдЪреАрдЬреЗрдВ рдХрднреА-рдХрднреА рдЯреВрдЯ рдЬрд╛рддреА рд╣реИрдВред рдпрджрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдЖрдкрдХреЗ рд╕реАрдЖрдИ рдмрд┐рд▓реНрдб рдХреЛ рддреЛрдбрд╝рддреА рд╣реИ, рддреЛ рдПрдХ рд╡рд┐рдлрд▓рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ pipenv
рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдХреЗ рдФрд░ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдЯреВрд▓ (рдЬреЛ рдЕрдХреНрд╕рд░ рдереЛрдбрд╝реЗ рдЕрдзрд┐рдХ рдкрд░рд┐рдкрдХреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдХреЛ рдЪрд╛рд╣рд┐рдП:
pipenv
рдХреЛ CI рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ, tox.ini
рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рд╕реНрдерд╛рди рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рджреЛ рдмрд╛рд░ рд╕реЛрдЪреЗрдВред рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдореВрд▓реНрдп рдорд┐рд▓рддрд╛ рд╣реИ? рдХреНрдпрд╛ рдореМрдЬреВрджрд╛ рдЯреВрд▓реАрдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?рдЕрдЬрдЧрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ pipenv
рднреВрдорд┐рдХрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдореБрдЦреНрдп рдкреНрд░рд╢реНрди рд╣реИрдВ:
pipenv
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдореВрд▓реНрдп рд▓рд╛рддрд╛ рд╣реИ? рдП: рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдкреНрд░рдмрдВрдзрди рдЙрдкрдХрд░рдгредpipenv
рд▓рд┐рдП рд░реАрд▓реЗрд╡реЗрдВрдЯ рдЙрдкрдпреЛрдЧ рдХреЗрд╕ рдХреНрдпрд╛ рд╣реИ? рдП: рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВредрдХреБрдЫ рдФрд░ рд╡рд┐рд╡рд░рдг рдФрд░ рддрд░рдХреАрдмреЗрдВ рдЕрдиреБрд╕рд░рдг рдХрд░рддреА рд╣реИрдВред
pipenv
рдЖрдкрдХреЗ рдкреИрдХреЗрдЬ рдореЗрдВ рдХреЛрдИ рд╕реБрд░рдХреНрд╖рд╛ рдирд╣реАрдВ рдЬреЛрдбрд╝реЗрдЧрд╛рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рди рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдХреЛрдИ рдЗрд╕реЗ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдЖрдк рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд░рдХреНрд╖рд╛ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдирд┐рд░рд╛рд╢ рдХрд░реЗрдЧрд╛ред
рдХрдВрдХреНрд░реАрдЯ (рдФрд░ рд╕реНрд╡реАрдХреГрдд) рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рдЖрдкрдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдмрд╛рдж рдХреЗ рдЪрд░рдг рдореЗрдВ рд╣реЛрдЧрд╛ред
Pipfile
, Pipfile.lock
рдФрд░ .env
рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рднрдВрдбрд╛рд░ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦреЗрдВрдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ .gitignore
ред
Pipfile
рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдпрд╛ рд╕рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдЖрдкрдХреЗ setup.py
рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВред рдФрд░ .env
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрднрд╡рдд: рдирд┐рдЬреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рдЬрд┐рд╕реЗ рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрдиреЗ рд╕реЗ рдЙрди рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХреЗрдЧрд╛, рдЬреЛ рд╕реАрдЖрдИ рдмрд┐рд▓реНрдб рдХреЗ рд╕рд╛рде рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЬрдм рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ pipenv
рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реИред
pipenv
рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдирд┐рдЬреА рдЯреВрд▓рдмреЙрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВpipenv
рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдкреНрд░рдмрдВрдзрди рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдХрд╛рдо рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред
рддрд░рдХреАрдм рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреА (рдирд┐рдЬреА) pipenv
рд╕рдВрдмрдВрдзрд┐рдд рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рд╕реАрдЦреЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
$ cd <project_repository>
$ # your library will bring the dependencies (via install_requires in setup.py)
$ pipenv install -e .
$ # add more dev tools you preffer
$ pipenv install --dev ipython pdbpp
$ # start hacking
$ pipenv shell
...
рдпрджрд┐ рдЖрдкрдХреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ .env
рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдпрд╛рдж рд░рдЦреЗрдВ: рдЕрдкрдиреЗ CI рдмрд┐рд▓реНрдб рд╕реЗ pipenv
рдЙрдкрдпреЛрдЧ рдХреЛ рджреВрд░ рд░рдЦреЗрдВ рдФрд░ рдЖрдкрдХрд╛ рдЬреАрд╡рди рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
setup.py
рдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЕрдкрдиреЗ setup.py
рдореЗрдВ extras_requires
рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
from setuptools import setup
setup(
name='mypackage',
....,
install_requires=["jinja2", "simplejson"],
extras_require={
'tests': ['pytest', 'pyyaml'],
'pg': ['psycopg2'],
},
....
)
tests
рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЗ рд▓рд┐рдП рдШреЛрд╖рд┐рдд рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
$ pipenv install -e .[tests]
рдзреНрдпрд╛рди рджреЗрдВ, рдХрд┐ рдЗрд╕рдореЗрдВ рд╣рдореЗрд╢рд╛ install_requires
рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреАред
рдпрд╣ рд╡рд┐рдзрд┐ рдбрд┐рдлреЙрд▓реНрдЯ рдФрд░ рджреЗрд╡ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред
рдпрд╣ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реИ, рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗ
/cc @uranusjr @jtratner @ncoghlan
maya
рдореБрджреНрджреЛрдВ рдХреЗ рдХреБрдЫ рд╕рдВрджрд░реНрдн:
pendulum>=1.0
рдареАрдХ рдХрд░реЗрдВ: рд╕рдВрд╕реНрдХрд░рдг рдкрд┐рдкрдлрд╛рдЗрд▓ рдореЗрдВ рдерд╛ рд▓реЗрдХрд┐рди setup.py рдореЗрдВ рдЧрд╛рдпрдм рдерд╛)pipenv
рдореБрджреНрджреЗ рдиреЗ рдкреВрд░реЗ рдЯреНрд░реИрд╡рд┐рд╕ рд░рди рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛)рдореБрдЭреЗ рдпрд╣ рднреА рдкрд╕рдВрдж рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рдкрд┐рдкреЗрдирд╡ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкрд╛рдпрдерди рдкреИрдХреЗрдЬрд┐рдВрдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЙрдкрд░реЛрдХреНрдд рд╕рд▓рд╛рд╣ рдХрд╛ рдкрд░рд┐рдгрд╛рдо "рдирд┐рд░реНрдзрд╛рд░рдХ/рдкреБрдирд░реБрддреНрдкрд╛рджрд┐рдд рд╕реАрдЖрдИ рдмрдирд╛рддрд╛ рд╣реИ" рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдореБрдЭреЗ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реЗ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рд░рддрд╛ рд╣реИред
рдЖрдк рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпрд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЕрднреА рднреА рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛?
@ tsiq-oliverc рдирд┐рдпрддрд╛рддреНрдордХ рдмрд┐рд▓реНрдб рдХрд╛ рдЗрд╕ рд╕рдордп рдЕрдкрдирд╛ рд╕реНрдерд╛рди рд╣реИ, рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред
рдЕрдЬрдЧрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рдпрддрд╛рддреНрдордХ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдпрд╛рд╕ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ:
Pipfile.lock
рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПPipfile.lock
рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк Pipfile
рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рд╛рд░ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВредPipfile.lock
рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рднрдВрдбрд╛рд░ред рдзреНрдпрд╛рди рджреЗрдВ, рдХрд┐ CI рдмрд┐рд▓реНрдб рдХреЗ рджреМрд░рд╛рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ Pipfile.lock
рдирд┐рд░реНрдорд╛рдг рдХреЛрдИ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИрдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдпрд╛рд╕ рд╣реИред рдФрд░ рдЖрдкрдХреЛ рдЬреЛ рдорд┐рд▓рддрд╛ рд╣реИ рд╡рд╣ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ, рдЬрд┐рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдкреНрддрд╛рд╣ рдмрд╛рдж рдорд╛рдирдХ рд╕реНрдерд╛рдкрдирд╛ рдЙрдиреНрдирдд рдирд┐рд░реНрднрд░рддрд╛ рдпрд╛ рджреЛ рдЙрдард╛рдПрдЧреА) рдФрд░ рдЬрд┐рд╕реЗ рддрдереНрдп рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛, рдЖрдкрдиреЗ Pipfile.lock
, рдЬреЛ рдлрд┐рд▓рд╣рд╛рд▓ рдЕрдкреНрд░рдЪрд▓рд┐рдд рд╣реИред
рд╕рдВрдШрд░реНрд╖ рдЗрд╕ рддрдереНрдп рдореЗрдВ рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдХрднреА рднреА рд╕рдЦреНрдд рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ, рдЕрдЬрдЧрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдирд┐рдпрддрд╛рддреНрдордХ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ - рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВред
@vlcinsky - рдпрджрд┐ рдЖрдкрдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдХреЛрдИ рдЙрдкрднреЛрдХреНрддрд╛ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рдирд┐рдпрдВрддреНрд░рдг рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдиреБрд░рдХреНрд╖рдХ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд▓рдХреНрд╖реНрдп рд╕рдВрднрд╡рдд: рдмрд╣реБрдд рдЫреЛрдЯрд╛ рджрд╛рдпрд░рд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдиреБрд░рдХреНрд╖рдХ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖реНрдп рджреЗрдЦреВрдВрдЧрд╛ (рдЬреЛ рдореЛрдЯреЗ рддреМрд░ рдкрд░ рд╕рдордХрдХреНрд╖ рд╣реИрдВ):
рдЕрдЧрд░ рдЙрди рддреАрди рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдкрдХрдбрд╝ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдореБрдЭреЗ рдЧреБрдгрд╡рддреНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╡рд┐рд░реЛрдзреА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред
рддреЛ рд╣рд╛рдБ, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдЙрдкрднреЛрдХреНрддрд╛ рдХреЛ рдкрд╛рдпрдерди рд╡реЗрд░рд┐рдПрдВрдЯ рдП, рдмреА рдФрд░ рд╕реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд▓реЙрдХрдлрд╛рдЗрд▓ (рдЖрджрд┐) рдЗрд╕реЗ рдирд╣реАрдВ рдХрд╛рдЯрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рддреАрди рд▓реЙрдХрдлрд╛рдЗрд▓реНрд╕ (рдпрд╛) рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЬреЛ рднреА рд╣реЛ)ред
рдореИрдВрдиреЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдкрд┐рдкреЗрдирд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ред
рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реАрдЖрдИ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ Pipfile
s рдЬреЛрдбрд╝рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрдВрдкрдиреА-рд╡реНрдпрд╛рдкреА рд╕реБрд░рдХреНрд╖рд╛ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рд▓реЙрдХрд┐рдВрдЧ (+ рд╣реИрд╢рд┐рдВрдЧ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рд╕рдорд░реНрдерд┐рдд рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╣реИред рдФрд░ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкрд┐рдкреЗрдирд╡ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рд╕рдореЗрдд рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд╛рд╕ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реИред
рдФрд░ рдЖрдкрдХреЛ рдЬреЛ рдорд┐рд▓рддрд╛ рд╣реИ рд╡рд╣ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ, рдЬрд┐рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдкреНрддрд╛рд╣ рдмрд╛рдж рдорд╛рдирдХ рд╕реНрдерд╛рдкрдирд╛ рдЙрдиреНрдирдд рдирд┐рд░реНрднрд░рддрд╛ рдпрд╛ рджреЛ рдЙрдард╛рдПрдЧреА) рдФрд░ рдЬрд┐рд╕реЗ рддрдереНрдп рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛, рдЖрдкрдиреЗ
Pipfile.lock
, рдЬреЛ рдлрд┐рд▓рд╣рд╛рд▓ рдЕрдкреНрд░рдЪрд▓рд┐рдд рд╣реИред
рдпрд╣ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рддреНрдп рдирд╣реАрдВ рд╣реИред рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИрдВ рдЬреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЖрдкрдХреЗ рдЙрддреНрдкрд╛рдж рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рди рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рд╕реНрд╡рдпрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИред
(рд╣рд╛рдБ, рдореИрдВ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, рдпрд╣рд╛рдБ рдПрдХ рдЖрд╡реЗрджрди рдирд╣реАрдВ...)
@ Moritz90 рдЖрдкрдХрд╛ рдкрд░рд┐рджреГрд╢реНрдп рдЙрджреНрдпрдо рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЕрдЬрдЧрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рд╣реИ рдФрд░ рд╡рд╣рд╛рдВ pipenv
рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд┐рдпрддрд╛рддреНрдордХ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИред
рдореЗрд░рд╛ рд╡рд┐рд╡рд░рдг рд╕рд╛рдорд╛рдиреНрдп рдЕрдЬрдЧрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдЬреИрд╕реЗ flask
, request
, maya
рдЖрджрд┐ рдкрд░ рд▓рдХреНрд╖рд┐рдд рд╣реИ рдЬрд╣рд╛рдВ рд╕рдВрджрд░реНрдн рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╣реИред maya
рдореЗрдВ рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реБрдП рдореБрдЭреЗ рдпрд╣ рд╕реАрдЦрдиреЗ рдореЗрдВ рдирд┐рд░рд╛рд╢рд╛ рд╣реБрдИ, рдХрд┐ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ pipenv
рдиреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛рдПрдВ (рдЖрдорддреМрд░ рдкрд░ рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЫрд┐рдкрд╛рдирд╛ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛) рдХреЛ рдЕрдзрд┐рдХ рдпрд╛ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реБрдП рдкреЗрд╢ рдХрд┐рдпрд╛ред рдореВрд▓реНрдпред
рдирд┐рдпрддрд╛рддреНрдордХ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рд▓рд╛рдЧрдд рдЖрддреА рд╣реИред рдФрд░ рдЕрдЧрд░ рдЧрд▓рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдирд┐рдореНрди рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рднреБрдЧрддрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдФрд░ рдпрд╣реА рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдореЗрд░рд╛ рддрд░реНрдХ рд╣реИ рдХрд┐ рдпрд╣ рдЙрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рд╣рдо рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдХрд┐ рдмрд┐рд▓реНрдб рдмрд┐рд▓реНрдХреБрд▓ рдирд┐рдпрддрд╛рддреНрдордХ рд╣реЛрдВред рдпрджрд┐ рдЖрдк рдЕрдкрдиреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ ==
рд╕рд╛рде рдкрд┐рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрдИ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИрдВ, рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдЙрдиреНрдирдпрди рд╕реАрдЖрдИ рдкрд░ рдирд┐рд░реНрдорд╛рдг рдХреЛ рддреЛрдбрд╝рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдПрдХ рдмрдЧ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рдпрддрд╛рддреНрдордХ рдирд┐рд░реНрднрд░рддрд╛ (рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдкреЗрдирд╡ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдЙрд╕реЗ рдореБрдЦреМрдЯрд╛ рдмрдирд╛ рджреЗрдЧрд╛ред рдЬрдм рдЖрдк рдЗрд╕реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддрдм рднреА рдирд┐рд░реНрдзрд╛рд░рдХ рд╣реЛрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдлрд╛рдпрджреЗрдордВрдж рд╣реЛрдЧрд╛, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
@uranusjr - рдЬрд╝рд░реВрд░ред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдЧрд░ рдЗрдЪреНрдЫрд╛ "рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рдирд┐рд░реНрдорд╛рдг" рд╣реИ, рддреЛ рдКрдкрд░ рдХреА рд╕рд▓рд╛рд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖ рд╕рдХрддреА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд▓рдЧрднрдЧ рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рд╕рдорд╛рдирддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: "рдпрджрд┐ рдЖрдк рдирд┐рдпрддрд╛рддреНрдордХ рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ ( pipenv
) рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдирд┐рдпрддрд╛рддреНрдордХ рдирд┐рд░реНрдорд╛рдг рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ" .
рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╡рд╛рдВрдЫрдиреАрдп рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рд╣реИред
@ tsiq-oliverc рдЕрдЪреНрдЫреА рдЧреБрдВрдЬрд╛рдЗрд╢ рдкрд░рд┐рднрд╛рд╖рд╛ - рдпрд╣ рдХреЗрдВрджреНрд░рд┐рдд рдЪрд░реНрдЪрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдПрдХ рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЬреЛрдбрд╝реВрдВрдЧрд╛ :
рдпрджрд┐ рд╣рдо Pipenv.lock
, рддреЛ рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдмрдирд╛рдПрдВ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд╕реАрдЖрдИ рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рдПрдВ, рд╣рдордиреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдХрд┐рдпрд╛ - рдЙрдЪрд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ред рдпрджрд┐ рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд┐рд╕реА рддрд░рд╣ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ - рдкреВрд░реНрд╡рд╕реНрдерд╛рдкрд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЫрд┐рдкрд╛ рджреЗрдЧрд╛ред
рдореЗрд░реЗ рд▓рд┐рдП рд╕реАрдЖрдИ рдХреЛ рдирд┐рдпрддрд╛рддреНрдордХ рддрд░реАрдХреЗ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рднреАрддрд░ рдореБрджреНрджреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИред рдпрджрд┐ рджреЛрдиреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рдЬреА рдкреАрдкреАрдЖрдИ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдкреАрдЫреЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдирд╛, рдЬреЛ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИ) рдореБрдЭреЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рд╕рдВрдШрд░реНрд╖ рд╣реИ, рддреЛ рдореЗрд░реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рд╣реИрдВред
рдореБрдЭреЗ рдЧрд▓рдд рдордд рд╕рдордЭреЛ: рдЧреИрд░-рдирд┐рд░реНрдзрд╛рд░рдХ рдмрд┐рд▓реНрдб рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрдИ рдЗрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рдореЗрд░реА рдЗрдЪреНрдЫрд╛ рд╕реАрдЖрдИ рдмрд┐рд▓реНрдб рдЪрд▓рд╛рдиреЗ рдХреА рд╣реИ, рдЬреЛ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдореБрджреНрджреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдЧрд╛ред
@vlcinsky рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдЕрджреНрдпрддрди рджрд╕реНрддрд╛рд╡реЗрдЬ рдЗрд╕реЗ рднреА рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЯреНрд░реЗрдбрдСрдлрд╝ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП, setup.py рдореЗрдВ install_requires рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдореВрд░реНрдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред [...]
рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрд┐рдкрдлрд╛рдЗрд▓ рдореЗрдВ рдХрд╣рд╛рдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд┐рдкрдлрд╛рдЗрд▓.рд▓реЙрдХ рдореЗрдВ рдареЛрд╕ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рд╕реЗрдЯ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВред [...]
рдмреЗрд╢рдХ, рдкрд┐рдкрдлрд╛рдЗрд▓ рдФрд░ рдкрд┐рдкреЗрдирд╡ рдЕрднреА рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдХрд╛рд╕ рдпрд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рдЖрд╡реЗрджрди рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред
(рдЙрд╕ рднрд╛рдЧ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ рдЬреЛ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред)
рдореИрдВ рдмрд╕ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЙрд╕реА рддрд░рд╣ рдмрдирд╛ рд░рд╣реЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреА рдореВрд▓ рдкреЛрд╕реНрдЯ рдореЗрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрд╕реНрд╡реАрдХрд░рдг рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмреНрд▓реИрдВрдХреЗрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реИрдВ рдХрд┐ рдЖрдк рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХрд┐ PyPI рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
@ рдореЛрд░рд┐рддреНрдЬрд╝ 9 0 рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдВред рдореИрдВ рдЙрд╕ рдлреЛрдХрд╕ рдХреЛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдФрд░ рднреА рдЬреНрдпрд╛рджрд╛ рджреГрд╢реНрдпрдорд╛рди рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВред
@ Moritz90 рдореИрдВрдиреЗ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реБрдП рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рдиреЛрдЯ рдЬреЛрдбрд╝рд╛ред
@vlcinsky - рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЖрдк рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ (рдпрд╛рдиреА рдЬрдм рдЖрдкрдХреА рдЕрдкрд╕реНрдЯреНрд░реАрдо рдирд┐рд░реНрднрд░рддрд╛ рдЕрдкрдбреЗрдЯ рд╣реЛрддреА рд╣реИ рддреЛ рдореБрджреНрджреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП)ред
рдЬрд╝реЛрд░ рд╕реЗ рд╕реЛрдЪрдирд╛, рдЗрди рджреЛ рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ? рджреЛ рдЪрд░рдгреЛрдВ рд╡рд╛рд▓реА рд╕реАрдЖрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЛрдиреЗ рдХреА рдПрдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ:
Pipfile.lock
рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИредpipenv update
рдЪрд▓рд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдпрд╣ рдЖрдкрдХреА рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рдирд╡реАрдирддрдо рдореЗрдВ рдЦреАрдВрдЪ рд╕рдХреЗ (рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдмрд┐рдирд╛ рд▓реЙрдХрдлрд╛рдЗрд▓ рд╡рд╛рд▓реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ?)@ tsiq-oliverc рдирд┐рдпрддрд╛рддреНрдордХ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдЯрдЕрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреВрдВрдЧрд╛:
pipenv
рд╕реЗ рдмрдЪрдирд╛рд╕рдВрд╕реНрдерд╛рдкрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП pipenv
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЕрд▓рдЧ рдХреЛрдб рд╣реИред
$ git clone <repo_url> <project_dir>
$ cd <project_dir>
$ pip install pipenv
$ $ # clean pypi cache and make it ready to cache somehow - not described here
$ pipenv install -e .[test]
$ # if we need extra testing packages in pipenv
$ pipenv install <extra_test_packages>
$ # record current requirements expressed in `Pipfile.lock`
$ pipenv lock
$ # if needed, record the `Pipfile.lock` somewhere
рдРрд╕реА рдиреМрдХрд░реА рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рд╣реИрдВ:
Pipfile.lock
рд░рд┐рдХреЙрд░реНрдб рдХреА рдЧрдИ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ (рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ)рдЪрд░рдг рд╣реИрдВ:
tox
, pip
рдЖрджрд┐ рдХреЛ рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВpipenv
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВ)Pipfile.lock
pypi рд╕рдВрдХреБрд▓ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрд╡рд▓рдкрд░ рд╕рд╛рдЗрдЯ рдкрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрдПрдХ рдФрд░ рдлрд╛рдпрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реЗрдЯрдЕрдк рдХреЗ рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ Pipfile
рдпрд╛ Pipfile.lock
рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╕рд╛рде рд╣реА рд╡рд┐рднрд┐рдиреНрди рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдирд╛ рд╣рдореЗрд╢рд╛ рд╕рдорд╛рди рд╣реЛрддрд╛ рд╣реИ ( Pipfile.lock
рд╣рдореЗрд╢рд╛ рджрд┐рдП рдЧрдП рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рдкреАрдкреАрдЖрдИ рдХреИрд╢ рд╡рд╣ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХреБрдЫ рд╢реЛрдз рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд╕рд╛рдзрд╛рд░рдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧреА рдФрд░ рд╢рд╛рдпрдж pipenv
рдЗрд╕рдХреЗ рд▓рд┐рдП рдорджрдж рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреИрдпрд╛рд░ рд╣реИред рд╢рд╛рдпрдж рдЕрдВрдХ #1731 рдЧрд╛рдпрдм рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
рдПрдХ рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛ рдирд┐рд░реНрднрд░рддрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ рдХрдИ рдкрд░реАрдХреНрд╖рдг рдирд┐рдпрддрд╛рддреНрдордХ рдирд┐рд░реНрдорд╛рдг рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ - рдЕрд░реНрдерд╛рдд, рдЬреНрдЮрд╛рдд рд╕рд╛рдордЧреНрд░реА рд▓реЗрдирд╛ рдФрд░ рдПрдХ рд╣рд▓ рдХрд┐рдП рдЧрдП рдЧреНрд░рд╛рдлрд╝ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рдирд╛ред рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП pytest-pypi
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЬреАрд╡рдВрдд рдЪрд░реНрдЪрд╛ рдкрд╕рдВрдж рдЖрдИ. рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдЬреНрдЮрд╛рдд рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдирдкрд┐рди рдХрд┐рдП рдЧрдП рд▓реЛрдЧреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдЬреНрдЮрд╛рдд рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдирдкрд┐рди рдХрд┐рдП рдЧрдП рд▓реЛрдЧреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
рдореИрдВ рдЗрд╕ рд╕реБрдЭрд╛рд╡ рдХреЛ рджреВрд╕рд░рд╛ рдорд╛рдирддрд╛ рд╣реВрдВред рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ "рдЬреНрдЮрд╛рдд рдЕрдЪреНрдЫреА рд╕реНрдерд┐рддрд┐" рд╣реЛрдирд╛ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдпрджрд┐ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рдХреБрдЫ рддреЛрдбрд╝рддрд╛ рд╣реИ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐ рдирдП рдирд╛рдмрд╛рд▓рд┐рдЧ/рдмрдЧрдлрд┐рдХреНрд╕ рд╕рдВрд╕реНрдХрд░рдг рднреА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
(рдореЗрд░реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░рд╛рдп рдореЗрдВ, рдЖрджрд░реНрд╢ рд╕реНрдерд┐рддрд┐ рдпрд╣ рд╣реЛрдЧреА рдХрд┐ рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдирд╡реАрдирддрдо рд▓рдШреБ рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣рдореЗрд╢рд╛ рдЙрди рдареЛрд╕ рдирд┐рд░реНрднрд░рддрд╛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХреЗрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдЙрдирдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд░рд╛рдп рд╣реИ рдФрд░ рд╕рднреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╕реЗрд╡рд░ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред)
@Moritz90 @techalchemy @uranusjr @tsiq-oliverc
рдкрд┐рдЫрд▓реА рдЪрд░реНрдЪрд╛ рд╕реЗ рдореЗрд░рд╛ рд╕рд╛рд░рд╛рдВрд╢ рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
Pipfile.lock
рдлрд╝рд╛рдЗрд▓ (рдлрд╝рд╛рдЗрд▓реЛрдВ) рдХреЛ рдХреМрди рдмрдирд╛рдП рд░рдЦреЗрдЧрд╛?рдкреНрд░рддреНрдпреЗрдХ рд╕рдорд░реНрдерд┐рдд рдУрдПрд╕ рдФрд░ рдкрд╛рдпрдерди рджреБрднрд╛рд╖рд┐рдпрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗрддрд╛ рд╣реИред
рдЬреИрд╕реЗ рдлреНрд▓рд╛рд╕реНрдХ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ (рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рд╕реАрдЖрдИ рд╕рд╛рдорд╛рди рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ):
рдпрд╣ 9 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдореЗрдВ рднрд┐рдиреНрди Pipfile.lock
ред
рдЙрдирдХрд╛ рд░рдЦрд░рдЦрд╛рд╡ рдХреМрди рдХрд░реЗрдЧрд╛?
рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
Pipfile.lock
рдмрдирд╛рдП рд░рдЦреЗрдВ (рдХрд┐рд╕ рдордВрдЪ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдкрд╕рдВрдж рд╣реИ?)рдкреНрд░рд╕реНрддрд╛рд╡: рд╕реАрдЖрдИ рдХреЛ pipenv install -e .
рджреНрд╡рд╛рд░рд╛ рдлрд╛рдЗрд▓ рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рджреЗрдВред рдЗрд╕реЗ рд░реЗрдкреЛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рди рдХрд░реЗрдВ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдмрд┐рд▓реНрдб рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЙрдЪрд┐рдд Pipfile.lock
рдЪреБрдирдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВред
рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддреЗ рд╕рдордп, рдЬреЛ pypi рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╡рд┐рдлрд▓ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдорд╛рдзреНрдпрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдкреНрд░рд╕реНрддрд╛рд╡:
Pipfile.lock
рджреНрд╡рд╛рд░рд╛ pipenv install -e .
рдЙрд╕рдХреЗ рдмрд╛рдж pipenv lock
рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИредPipfile.lock
редPipfile.lock
рдореЗрдВ tox.ini
рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВредsetup.py
рдкреНрд░рдХрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛рдкреБрд╕реНрддрдХрд╛рд▓рдп setup.py
рдХреЛ рддреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ( install_requires
рдореЗрдВ рдЕрдиреБрдкрд▓рдмреНрдз рдирд┐рд░реНрднрд░рддрд╛, рдЕрдиреБрдкрд▓рдмреНрдз рд╕рдВрд╕реНрдХрд░рдг рд╡рд┐рдирд┐рд░реНрджреЗрд╢рдХ рдЖрджрд┐) рдФрд░ CI рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдРрд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЫрд┐рдкрд╛рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдП (рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЫреЛрдбрд╝реА рдЧрдИ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкреВрд░реНрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ)ред
рдкреНрд░рд╕реНрддрд╛рд╡:
pipenv install -e .
рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВ (рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ)редpipenv
) рдФрд░ рд╕рдВрднрд╡рддрдГ рддреБрд▓рдирд╛ рдХрд░реЗрдВ рдХрд┐ рдкрд░рд┐рдгрд╛рдореА pip freeze
рдЖрдЙрдЯрдкреБрдЯ pipenv
рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЧрдП рд╕рдмрд╕реЗрдЯ рдХрд╛ рд╕рдмрд╕реЗрдЯ рд╣реИредрдХреБрдЫ рдирд┐рд░реНрднрд░рддрд╛ рдЕрджреНрдпрддрди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╕реАрдЖрдИ рдРрд╕реА рд╕рдорд╕реНрдпрд╛ рдкрд░ рд╡рд┐рдлрд▓рддрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдЧрд╛ред
рдкреНрд░рд╕реНрддрд╛рд╡:
Pipfile.lock
рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЧреИрд░-рдореБрджреНрджрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рд╡реИрд╕реЗ рднреА рдЕрдирдкрд┐рди рдореЛрдб рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВ)рд╕рднреА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдореЛрдб рдореЗрдВ рдореИрдВрдиреЗ pipenv
рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗрд╡рд┐рдВрдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдореЗрдВ рд░рдЦрдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрдЯрд┐рд▓ рд╕рд╛рдорд╛рди (рд╕реНрд╡рдЪрд╛рд▓рди !!!) рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рд╕реЗ рдмрдЪрддреЗ рд╣реИрдВред
рдореЗрд░реЗ рдореВрд▓ рдкрд╛рда рдХреЗ рд╡рд┐рдкрд░реАрдд рджреВрд╕рд░рд╛ рдФрд░ рддреАрд╕рд░рд╛ рдореЛрдб рд╕реАрдЖрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ pipenv
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдХрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рд╡рд╛рд▓рд╛ рд╕рд░рд▓ рдкреИрдХреЗрдЬ рдЬреЛ рдЕрдХреНрд╕рд░ рдирд╣реАрдВ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред
рдмрд╕ pipenv
рдпреБрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рджреМрдбрд╝реЗрдВ рдФрд░ рдЪреАрдЬреЛрдВ рдХреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рд░рд▓ рд░рдЦреЗрдВред
рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЗ рдЬрдм рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдкрд░реЗрд╢рд╛рдиреА рдкреИрджрд╛ рдХрд░рддреА рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕реАрдЖрдИ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдмрдирд╛рдиреЗ рдХрд╛ рдФрдЪрд┐рддреНрдп рдирд╣реАрдВ рд╣реИред
рд╣рд░ рдмрд╛рд░ рдЬрдм рд╕реАрдЖрдИ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдирдпрд╛ Pipfile.lock
рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ рдЬреЛ рдЗрд╕ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред
Pipfile.lock
CI рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдмрди рдЬрд╛рдПрдЧрд╛ред
рдЕрдЧрд░ рдЪреАрдЬреЗрдВ рдЧрд▓рдд рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ, рддреЛ рдбреЗрд╡рд▓рдкрд░ рдЯреВрдЯреЗ рд╣реБрдП рдирд┐рд░реНрдорд╛рдг рд╕реЗ Pipfile.lock
рдЪреБрди рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдлрд┐рдХреНрд╕рд┐рдВрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЕрдЧрд░ рдХреЛрдИ рддреИрдирд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдкрд┐рдЫрд▓реЗ рд╕рдлрд▓ рдирд┐рд░реНрдорд╛рдг рд╕реЗ Pipfile.lock
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЬрдм рдирд┐рд░реНрднрд░рддрд╛ рдмрджрд▓рдирд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рд╣реЛ, рддреЛ рд╕реАрдЖрдИ рдПрдХ рдмрд╛рд░ рдореЗрдВ Pipfile.lock
рдмрдирд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рдЕрд╡рдзрд┐ (рдПрдХ рдорд╣реАрдиреЗ?) рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд░рд╣реЗрдЧрд╛ред
рдпрд╣ рд╕реАрдЖрдИ рд╕реЗрдЯрдЕрдк рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдХрдард┐рди рдмрдирд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдо рд╕реЗ рдХрдо рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдп рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП (рдПрдХ Pipfile.lock
рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛)ред
рдЪреЗрддрд╛рд╡рдиреА: Pipfile.lock
рдЗрд╕ рд╕рдордп рднреА рдЕрдкрдбреЗрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, setup.py
рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ, рдХрд┐ рд╣рд┐рдордпреБрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реИрдЯ рдХреЛ рдЧрд┐рд▓рд╣рд░реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЬрдореЗ рд╣реБрдП рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдирдкрд┐рди рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╡рд┐рд░реБрджреНрдз рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдирд┐рдпрддрд┐рд╡рд╛рдж рдФрд░ рдЬрдЯрд┐рд▓рддрд╛ рдореЛрдб рджреНрд╡рд╛рд░рд╛ рдореЛрдб рдореЗрдВ рдмрдврд╝рддреА рд╣реИред
рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реЛрдЧрд╛:
рд╕рднреА рд▓рд╛рдн рдХреБрдЫ рди рдХреБрдЫ рдЦрд░реНрдЪ рдХрд░рддреЗ рд╣реИрдВред
рдпрджрд┐ рдпрд╣рд╛рдВ рд▓рдХреНрд╖реНрдп рдбреЙрдХреНрд╕ рдореЗрдВ рд╕рд▓рд╛рд╣ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдХреБрдЫ рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рдЬрд┐рдореНрдореЗрджрд╛рд░ рд▓рдЧрддрд╛ рд╣реИ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ (рдкреБрдирд░реБрддреНрдкрд╛рджрд┐рдд рдмрд┐рд▓реНрдб) рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ, рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рди рд╣реЛред"
@vlcinsky рд╢реАрд░реНрд╖рдХ "рдореЛрдб: рдЬреЗрдирд░реЗрдЯ рдФрд░ рд╕реАрд▓" рдХреЗ рддрд╣рдд, рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдЕрдВрддрд┐рдо рд╕рдлрд▓ Pipfile.lock
рд╣рдореЗрд╢рд╛ рдЖрд╕рдкрд╛рд╕ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЬреЗрдирдХрд┐рдиреНрд╕ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рдХреЗред рдЙрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде, рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрд╕ рд╕реЗрдЯрдЕрдк рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рдирд╛ рдареАрдХ рд░рд╣реЗрдЧрд╛ред @ Tsiq-oliverc рдХреА рддрд░рд╣, рдореИрдВ рдкрд╣рд▓реЗ рдореЛрдб рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред
рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ, рдЙрддрдирд╛ рд╣реА рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдЗрд╕ рдмрд╛рдд рдкрд░ рдПрдХ рдЦрдВрдб рдмрди рдЬрд╛рдПрдЧрд╛ рдХрд┐ рд╕реАрдЖрдИ рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП pipenv
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рднрд▓реЗ рд╣реА рдЖрдк рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реЛрдВред
@ tsiq-oliverc рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рдпрдерди рдкреИрдХреЗрдЬ рдХреЗ рд╡рд┐рд╢рд╛рд▓ рдмрд╣реБрдордд "рд░рди, рдлреЙрд░реЗрд╕реНрдЯ, рд░рди" рдореЛрдб рдореЗрдВ рд╣реИрдВред рдореИрдВрдиреЗ рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдкреИрдХреЗрдЬреЛрдВ рдХреЛ tox
рдФрд░ pytest
, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдкреИрдХреЗрдЬ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗрдЧрд╛ рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдЪрд╛рд░ рдерд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдм рдПрдХ рдФрд░ рдмрдврд╝рд┐рдпрд╛ рдЯреВрд▓ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рдпрдерди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП pipenv
рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред рдореИрдВ рдПрдХ рдпрд╛ рджреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрдВрдЬрдиреЛрдВ рдХреЛ рдЦреЛрдЬрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдЙрдЪрд┐рдд рдФрд░ рдкрд╛рд▓рди рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реЛрдВред
рдореИрдВ рдлреНрд▓рд╛рд╕реНрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдХреНрдпрд╛ рдХрд╣реВрдВрдЧрд╛?
Pipfile.lock
рдлрд╝рд╛рдЗрд▓реЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрддрд┐ рд╕реЗрдЯ рдХрд░реЗрдВ?Pipfile.lock
рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрд╡рд┐рд╕ рдФрд░ рдПрдкрд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рд╕реАрдЖрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ, рдЬрдм рдХрд┐рд╕реА рдХреЛ рдЕрдкрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЕрд╕рдлрд▓ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ?рд▓рдХреНрд╖реНрдп рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХрд╛рд░реНрдп рд╢реИрд▓реА рдЦреЛрдЬрдирд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдбреЙрдХреНрдЯрд░ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВред
@vlcinsky рдореИрдВ рдХрд╣реВрдВрдЧрд╛ (1) рдФрд░ (4) рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд┐рдлрд╛рд░рд┐рд╢ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЬрдмрдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж Pipfile.lock
рдЖрдк рдмрд┐рд▓реНрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рди рдкрд╛рдПрдВрдЧреЗ (рдЬреЛ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдмрд╛рд╣рд░ рдареАрдХ рд╣реИ), рдпрджрд┐ рдЖрдк рд▓реЙрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЬрдирд░реЗрдЯ рдФрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рднреА рдЖрдкрдХреЛ рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗрдЧрд╛ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рдиред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ : рдореЗрд░реА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд╛ рдЯреАрдПрд▓; рдбреЙ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдЧрд╛:
pipenv
рдЗрд╕ рд▓рдХреНрд╖реНрдп рдХреЛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИредPipfile.lock
рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред (рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореМрдЬреВрджрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред)Pipfile.lock
рдЬреЗрдирд░реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдмрд╛рдж рдХреЗ рд▓рд┐рдП рдЖрд░реНрдХрд╛рдЗрд╡ рдХрд░реЗрдВред(рдмреЗрд╢рдХ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╡рд░рдг рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред)
@ Moritz90 рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдерд╛, рдореИрдВрдиреЗ "рдЬреЗрдирд░реЗрдЯ рдПрдВрдб рд╕реАрд▓" рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ред
рдкреБрди (1): рдХрд╣рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред
рдкреБрди (4): рд╣рд╛рдБ, рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдЬреЗрдирд░реЗрдЯ рдФрд░ рд╕реАрд▓" рд╕рдмрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рддрд░реАрдХрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдлреНрд▓рд╛рд╕реНрдХ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореЗрд░реА рд╣рд┐рдореНрдордд рдирд╣реАрдВ рд╣реЛрдЧреА (рдХрдо рд╕реЗ рдХрдо рдлрд┐рд▓рд╣рд╛рд▓ рддреЛ рдирд╣реАрдВ)ред
рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж Pipfile.lock
: рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ (рдЕрд░реНрдз) рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдпрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдХреЙрд░реНрдкреЛрд░реЗрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЖрдк рд╕реАрдзреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ pypi рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдирд┐рдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬреЛ рдХреЗрд╡рд▓ рд╕реНрд╡реАрдХреГрдд рдкреИрдХреЗрдЬ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ ( devpi-server
рдЙрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ - рдХрдИ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛, рдкреНрд░рдХрд╛рд╢рд┐рдд рдкреИрдХреЗрдЬреЛрдВ рдХреА рдирд┐рдпрдВрддреНрд░рд┐рдд рдЕрд╕реНрдерд┐рд░рддрд╛, рдмрд╛рд╣рд░реА рдХреЗ рд▓рд┐рдП рдЕрдиреБрдореЛрджрди рдкреИрдХреЗрдЬ рдЖрджрд┐) рдпрджрд┐ Pipfile.lock
рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдРрд╕реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪрд▓рддреА рд╣реИ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рд╡рд╣реА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕реНрд╡реАрдХреГрдд рд╣реИ рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╡рд╣рд╛рдБ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдирд╛ рд╣реИ, рддреЛ рдХрд┐рд╕реА рдХреЛ рдЦрдбрд╝рд╛ рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЕрдиреБрдореЛрджрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕реАрдЖрдИ рдмрд┐рд▓реНрдб рдХреЗ рдмрд╛рдж рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдЧрд╛ рдХрд┐ рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рддреЛрдбрд╝рддрд╛ рдирд╣реАрдВ рд╣реИред рдФрд░ pipenv check
рдХреЗ рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд╛ рдореБрджреНрджреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рднреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдЗрд╕реЗ (рдЕрд░реНрдз) рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЙрджреНрдпрдо рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░рд╛ рдЬреНрдЮрд╛рди рдмрд╣реБрдд рд╕реАрдорд┐рдд рд╣реИред
рдирдорд╕реНрддреЗ рдкрд┐рдкреЗрдирд╡ рдЯреАрдоред рдореИрдВ рдЗрд╕ рдкрд╛рда рдореЗрдВ рдЬреЛ рдХреБрдЫ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдЙрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣ рдХрд┐рд╕реА рднреА рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдкрд┐рдкрдлрд╛рдЗрд▓/рдкрд┐рдкреЗрдирд╡ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдкрд╛рда рдпрд╛ рдЗрд╕ рдкрд╛рда рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкрд┐рдкреЗрдирд╡ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рдЕрдВрджрд░ рдПрдХреАрдХреГрдд рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд╢реЛрдзрди рд╣реИ рдЬрд┐рд╕ рдкрд░ рдореИрдВ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:
рд╣рдорд╛рд░реЗ рдЖрдВрддрд░рд┐рдХ рдкрд╛рдпрдерди рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп, рд╣рдорд╛рд░реЗ рдЖрдВрддрд░рд┐рдХ рдкреАрдкреАрдЖрдИ, рдЖрджрд┐ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдореЗрд░реЗ рдЕрдкрдиреЗ рдкрд╛рдпрдерди рдкреИрдХреЗрдЬ (рдЙрджрд╛: cfgtree , txrwlock , pipenv-to-requirements ) рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЙрдкрдпреЛрдЧ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рдЬреЛ рдЗрди рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рд╕рд╛рд░рдЧрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдЬрдЧрд░ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ: PBRред
PBR рдореВрд▓ рд░реВрдк рд╕реЗ рдкрдврд╝рддрд╛ рд╣реИ requirements.txt
рдореЗрдВ рдПрдХ рд╡рд┐рддрд░рдг рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдФрд░ рдЗрд╕рдХреА рд╕реБрдИ рдкрд╛рдпрд╛ install_requires
рдХреЗ setup.py
ред рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХреЗрд╡рд▓ requirements.txt
рдХреЛ рдвреАрд▓реА рдирд┐рд░реНрднрд░рддрд╛ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬрдм рддрдХ Pipfile
рдХрд╛ рд╕рдорд░реНрдерди рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ PBR рдХреЗ рдЕрдВрджрд░ рдПрдХреАрдХреГрдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛, рддрдм рддрдХ рдореБрдЭреЗ pipenv-to-requirements рдХрд╛ рдЙрдкрдпреЛрдЧ requirements.txt
рд╕реЗ Pipfile
requirements.txt
рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рджреЛрдиреЛрдВ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рд╣реЛрдВ рдФрд░ рджреЛрдиреЛрдВ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реЛрдВ рд╕реНрд░реЛрдд рдореЗрдВ, рдФрд░ рд╡рд┐рддрд░рдг рдкреИрдХреЗрдЬ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдкреАрдмреАрдЖрд░ рдЗрдВрдЬреЗрдХреНрд╢рди рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ pipenv
рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ requirements.txt
рдореИрдВ рдПрдХ рдкрд░ рдХрд╛рдо Pipfile рдХреЗ рд╕рдорд░реНрдерди PBR рдХреЗ рд▓рд┐рдП, рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рд╣реЛ рдЬрд╛рдПрдЧрд╛ Pipfile
рдЗрд╕рдХреА рд╕реБрдИ рдореЗрдВ (рдФрд░ рдирд╣реАрдВ рддрд╛рд▓рд╛ рдлрд╝рд╛рдЗрд▓) рдФрд░ install_requires
рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИ requirements.txt
ред
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЕрдиреНрдп рд╕рдорд╛рди рдкреИрдХреЗрдЬ рдореМрдЬреВрдж рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рднреА рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд▓реЛрдЧ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЧрд┐рдЯ рдЗрддрд┐рд╣рд╛рд╕ рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг, рд▓реЗрдЦрдХреЛрдВ рдХреА рдСрдЯреЛ рдкреАрдврд╝реА рдФрд░ рдЪрд╛рдВрдЧрд▓реЙрдЧ)ред
рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рдпрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд┐рдЦрдирд╛, рдмрдирд╛рдП рд░рдЦрдирд╛ рдФрд░ рд╕рдВрднрд╛рд▓рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдореБрдЭреЗ рдЗрд╕ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рди рдХрд░рдиреЗ рдХрд╛ рджреБрдЦ рд╣реЛрдЧрд╛ред рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреА рдХрдВрдкрдиреА рдкрд░ рдЖрдзреБрдирд┐рдХ рдкрд╛рдпрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдЦрдиреЗ рдХреЗ "рдЕрдиреБрд╢рдВрд╕рд┐рдд" рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рдкрд┐рдкреЗрдирд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдкрд░ "рдзреЛрдЦрд╛" рдЬреИрд╕рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдм рддрдХ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрди рд╣реИрдВред рдЕрдЬрдЧрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛, рдореИрдВ рдЕрдкрдиреА рдХрдВрдкрдиреА рдореЗрдВ рдирдП рдЕрдЬрдЧрд░ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рджреЗ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдкрд╣рд▓реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ install_requires
рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЬрдЧрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдЦрдирд╛, рдФрд░ рдлрд┐рд░ PBR
рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ ( рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдореИрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣реА рд╕реЗрд╡рд░ рд╕рдВрд╕реНрдХрд░рдг рдЯреИрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП pbr рдХреА рд╕рд┐рдореЗрдВрдЯрд┐рдХ рдХрдорд┐рдЯ рдлреАрдЪрд░ рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рд╣реВрдВ)ред
рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд░реНрдкрд┐рдд рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд░реАрдбрдереЗрдбреЙрдХреНрд╕ рдпрд╛ рдкреАрдпреВрдк рдЬреИрд╕реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╣реИ (рднрд▓реЗ рд╣реА рдкреАрдпреВрдкреА рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рд▓рд┐рдВрдХ рд╣реЛрдиреЗ рдкрд░ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реЛ)ред
рдореИрдВ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдкрд╛рдпрдерди рдкреИрдХреЗрдЬ рдХрд░рдиреЗ рдХреЗ "рдорд╛рдирдХ" рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдУрдкрдирд╕реНрдЯреИрдХ" рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдкрдирд╛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдФрд░ рдпрджрд┐ рджреВрд╕рд░реЛрдВ рдХреЗ рдкрд╛рд╕ рд╕рдорд╛рди рдпрд╛ рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕реА рдЕрдиреБрднрд╡ рд╣реИ, рддреЛ рдореИрдВ рд╣реЛрдЧрд╛ рдЙрдиреНрд╣реЗрдВ рд╕реБрдирдиреЗ рдФрд░ рдореЗрд░реА рдмрд╛рдд рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реБрдИред
рдЯреАрдо, рдЖрдк рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ "рд╕рдореБрджрд╛рдп" рдЕрдиреБрднрд╛рдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ? рддрд╛рдХрд┐ рдореЗрд░реЗ рдЬреИрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдирд╛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рд╡рд╣ рдкрд┐рдкреЗрдирд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдкрд┐рдкреЗрдирд╡ рдЯреАрдо рдХреЗ рдкреВрд░реНрдг рд╕рдорд░реНрдерди рдХреЗ?
рдкреБрдирд╢реНрдЪ: рдпрджрд┐ рдЖрдк рдЗрд╕ рд╕реВрддреНрд░ рдХреЛ рджреВрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдореИрдВ рдЗрд╕реЗ рдПрдХ рд╕рдорд░реНрдкрд┐рдд рдореБрджреНрджреЗ рдкрд░ рд▓реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реВрдВ
@vlcinsky (1) рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ - рдЕрдкрдиреА рд▓реЙрдХрдлрд╛рдЗрд▓ рдХреЛ рдЕрдкрдиреЗ рд░реЗрдкреЛ рдореЗрдВ рд░рдЦреЗрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдХреЗ рдХрд╣рдиреЗ рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ: рдПрдХ рдмрд╛рд░ рдЬрдм рдпрд╣ рдмреБрдирд┐рдпрд╛рджреА рд░рдгрдиреАрддрд┐ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд░рд╣ рдЬрд╛рддреА рд╣реИ рддреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд▓рд╛рд╣ рджреЗрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдЪ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛ рд╢рд╛рдпрдж рдорд╛рдорд▓рд╛-рджрд░-рдорд╛рдорд▓рд╛ рдЖрдзрд╛рд░ рдкрд░ рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИред
рдпрд╛ рдЗрд╕реЗ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдорд╛рдзрд╛рди рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕реАрдЖрдИ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рдХреМрди рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдЧрд╛рд░рдВрдЯреА рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
@gsemet рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХреНрдпрд╛? рдкрд┐рдЫрд▓реЗ рджреЛ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдмрдирд╛рдП рдЧрдП рдореЗрд░реЗ рд╕рднреА рдкрд╛рдпрдерди рдкреИрдХреЗрдЬ pbr
рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВ - рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рдФрд░ рдЬрдм рднреА рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдореИрдВ рдкреАрдмреАрдЖрд░ рдореЗрдВ рдкрд┐рдкрдлрд╛рдЗрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рдЖрдкрдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реВрдВ (рдХреБрдЫ рдЕрдВрдЧреВрдареЗ рдКрдкрд░, рд╡реЛрдЯ рдЗрддреНрдпрд╛рджрд┐)ред
рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ ( pipenv
рдкреИрдЯрд░реНрди рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рдпрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдВрдЯреАрдкреИрдЯрд░реНрди рдХреА рдЦреЛрдЬ) рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рджреЛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ pbr
рдЫреЛрдбрд╝рд╛:
pbr
рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ (рдЖрдкрдиреЗ рдЙрдирдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ) рдФрд░ рдпрд╣ рд╢рд╛рдпрдж рдЪрд░реНрдЪрд╛ рдХреЛ рджреВрд░ рдХрд░ рджреЗрдЧрд╛рджреВрд╕рд░реА рдУрд░, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреАрдмреАрдЖрд░-рдкреНрд░реЗрдорд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреА рдПрдХ рд░реЗрд╕рд┐рдкреА рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдореБрдЭреЗ рдЗрд╕реЗ рдкрдврд╝рдирд╛ рд╣реИред
@ tsiq-oliverc рдЖрдкрдиреЗ рдирд╛рдЦреВрди рдорд╛рд░рд╛: рдЕрдкрдирд╛ рд▓реЙрдХрдлрд╛рдЗрд▓
рдпрд╣реА рд╡рд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред рдпрджрд┐ рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рджреЛрдмрд╛рд░рд╛ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рдорд┐рд▓реЗрдЧрд╛, рдЬрд╣рд╛рдВ Pipfile.lock
рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЖрдкрдХреЗ рд╕реАрдЖрдИ рдкрд░реАрдХреНрд╖рдг рдЯреВрдЯ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╛ рддреЛ рдмрд┐рд▓реНрдб рд░рди рдХреЛ рддреЛрдбрд╝рдирд╛ рдпрд╛ рдореБрджреНрджреЛрдВ рдХреЛ рдЫреБрдкрд╛рдирд╛, рдЬреЛ рдЕрдиреНрдпрдерд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╛ рдЧрд▓рдд рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рджрд┐рдП рдЧрдП рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП ...)
рдпрджрд┐ рдЖрдк рдореБрдЭреЗ рдПрдХ рд░реЗрдкреЛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдпрд╣ рдареАрдХ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рдпрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдп), рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреАред рдпрд╛ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЬреЛрдЦрд┐рдо рд╣реИрдВ рдпрд╛ рдХреНрдпрд╛ рдЪреАрдЬреЗрдВ рдЕрдзреВрд░реА рд╣реИрдВред
рдардВрдбрд╛ ! рдореИрдВ рдЗрд╕ рдХреБрдХреАрдХрдЯрд░ рдХреЛ рднреА рдмрдирд╛рдП рд░рдЦрддрд╛
@vlcinsky рдареАрдХ рд╣реИ, рддреЛ рдЪрд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдЖрдкрдХреА рдореВрд▓ рдкреЛрд╕реНрдЯ рдореЗрдВ рдпреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рдХреНрд╖рдг рд╣реИрдВ:
pipenv install -e .
, рд╣реИ рдирд╛?@ tsiq-oliverc рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реИ, рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдиреЗ рдореБрдЭреЗ рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЗ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреЗ рдкреБрдирд░реБрддреНрдкрд╛рджрди рдореЗрдВ рдпреЛрдЧрджрд╛рди рджрд┐рдпрд╛ред
рджреЛрд╣рд░рд╛рд╡ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдХрдлрд╛рдЗрд▓ ( Pipfile.lock
) рдХреЛ рд░реЗрдкреЛ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рдЖрдкрдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ:
рдЯреВрдЯреА рд╣реБрдИ setup.py рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ pipenv install -e .
рдЬреЛ рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдЙрд╕рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рджреЗрдВ, рдпрд╣ Pipfile.lock
рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдЗрд╕реЗ рдмрдирд╛рдиреЗ (рдкреБрдирдГ) рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реИред рдЕрдЧрд░ рдХреЛрдИ Pipenv.lock
рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдореМрдЬреВрдж рд╣реИред
рд╡рд┐рднрд┐рдиреНрди рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдУрдПрд╕ рдореЗрдВ рдкреБрдирдГ doit
рдкреБрд░рд╛рдирд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдирдпрд╛ рдкрд╛рдпрдерди 2.x рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред watchdog
рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдирд┐рд░реНрднрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рд▓рд┐рдирдХреНрд╕ рдкрд░ рдЗрдиреЛрдЯрд┐рдлрд╛рдИ, рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдХреБрдЫ рдФрд░, рдУрдПрд╕рдПрдХреНрд╕ рдкрд░ рдХреБрдЫ рдФрд░ред рдореЗрд░реЗ рдкреВрд░реНрд╡ рдЧреНрд░рд╛рд╣рдХ рдХрд╣рддреЗ рдереЗ "рдпрд╣ рдХрднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛" рдФрд░ 50% рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдпрд╣ 2 рд╕рдкреНрддрд╛рд╣ рдХреЗ рднреАрддрд░ рд╣реБрдЖред рд╕реАрдЖрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рдирд╣реАрдВ рд╣реИред
рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ .. 15 рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдУрдкрди рд╕реЛрд░реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВред рдПрдХ рдирд╡рд╛рдЧрдВрддреБрдХ рдпрд╛ рдердХреЗ рд╣реБрдП рдХреЛрд░ рдбреЗрд╡рд▓рдкрд░ рджреНрд╡рд╛рд░рд╛ Pipfile.lock
рдХреЛ рдкреБрдирд░реНрдЬреАрд╡рд┐рдд рдХрд░рдирд╛ рднреВрд▓рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рд╣реИред рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП maya
рдкреИрдХреЗрдЬ рдореИрдВ рдкреБрдирд░реНрдЬреАрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ Pipfile.lock
рдХреЗ рд░реВрдк рдореЗрдВ рдирдП рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ setup.py
ред рдХреНрдпрд╛ рдпрд╣ рдЬрд░реВрд░реА рдерд╛? рдХреНрдпрд╛ рдореИрдВрдиреЗ рдЗрд╕реЗ рдареАрдХ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛? рдХреНрдпрд╛ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╕рднреА рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдерд╛? рдЙрддреНрддрд░ рд╣реИрдВ рдирд╣реАрдВ, рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ, рдирд╣реАрдВред рд╡реИрд╕реЗ рднреА, рдЖрдкрдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж (рдЗрд╕рдиреЗ рдореБрдЭреЗ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЖрдЧреЗ рд╡рд░реНрдгрд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛)ред
рдЯреЙрдХреНрд╕ рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдЯреЙрдХреНрд╕ рдХрдИ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡реНрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдЙрдирдХреЗ рднреАрддрд░ рдЪрд▓ рд░рд╣реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд┐рд╢рд┐рд╖реНрдЯ tox.ini
рдЕрдЬрдЧрд░ 2.7, 3.4, 3.5, 3.6 рдФрд░ рдЖрдкрдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡рд╣рд╛рдВ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЧрдВрднреАрд░ рдкрд░реАрдХреНрд╖рдХреЛрдВ рдХрд╛ рдкрд╛рд╡рд░рдЯреВрд▓ рд╕реНрдерд╛рдкрд┐рдд рд╣реИред pipenv
рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд╡рд╢реНрдпрдХ рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рддрд░рд╣ рд╕реЗ рдореИрдВрдиреЗ рдЖрдкрдХреА рд╕рд▓рд╛рд╣ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рдФрд░ рдЬрд╣рд╛рдБ рд╕рдВрднрд╡ рд╣реЛ pipenv
рд╕реЗ рдЕрдзрд┐рдХ рдмреЗрд╣рддрд░ рдЯреВрд▓ (рдЯреЙрдХреНрд╕) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрд╛ред
рдкреБрди: рдкрд┐рдкреЗрдирд╡ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред рдпрд╣ рд╡рд╛рдХрдИ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рд╕реАрдЖрдИ рдкрд░реАрдХреНрд╖рдг (рдЯреЙрдХреНрд╕ рдЖрдзрд╛рд░рд┐рдд) рдерд╛ рдЬреЛ рд╕реНрдерд╛рдиреАрдпрд╣реЛрд╕реНрдЯ рдкрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдЯреНрд░реИрд╡рд┐рд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ pipenv
рдореБрджреНрджреЗ рдХреЗ рдХрд╛рд░рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛ред рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдЕрднреА рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддреЛ рдлрд┐рдХреНрд╕ рдЬрд╛рд░реА рд╣реЛрдиреЗ рддрдХ рдкрд┐рдирд┐рдВрдЧ рдорджрдж рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдРрд╕реЗ рд╣реА рдЪрд▓рддрд╛ рд╣реИ - рдореИрдВ рдЗрдВрддрдЬрд╛рд░ рдХрд░реВрдВрдЧрд╛ред
рдзреНрдпрд╛рди рджреЗрдВ, рдХрд┐ рдореЗрд░реА рдореВрд▓ рдкреЛрд╕реНрдЯ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рд╕реАрдЖрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ pipenv
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рдЙрдЪрд┐рдд рд╕реНрдерд╛рди рд╣реИ ("рд╕реАрд▓рд┐рдВрдЧ" рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрд╛рдж рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рд╣реИ)ред
@ tsiq-oliverc рдЬрдмрдХрд┐ рдореБрдЭреЗ рд╢реБрд░реВ рдореЗрдВ "рдЬреНрдЮрд╛рдд рдЕрдЪреНрдЫреЗ" рдФрд░ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рджреЛрдиреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЛ рдкрд╕рдВрдж рдЖрдпрд╛, рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рд▓рдЧрддрд╛ рд╣реИ, рдкреНрд░рдпрд╛рд╕ рдХреЛ рдЙрдЪрд┐рдд рдард╣рд░рд╛рдирд╛ рдХрдард┐рди рдФрд░ рдХрдард┐рди рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рджреЛрдиреЛрдВ рдХреЛред
рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдЖрдкрдХреЛ рдорд┐рд▓рддреА рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдкрддрд╛ рдЪрд▓ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛ рдЕрджреНрдпрддрди рдпрд╛ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдХрд╛рд░рдг рд╡рд┐рдлрд▓рддрд╛ рд╣реБрдИ рдереА рдпрд╛ рдирд╣реАрдВред рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдорд┐рдЯ рдмрдирд╛рдХрд░ (рдЬрдм рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓реЙрдХ рдХреА рдЧрдИ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ) рдпрд╛ рдПрдХ рд╕рдлрд▓ рдмрд┐рд▓реНрдб рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд рдирд╡реАрдирддрдо рд▓реЙрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдмрдЧ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬрдм рд╣рдореЗрд╢рд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ)ред рдФрд░ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ, рдЖрдк рд╡реИрд╕реЗ рднреА "рдмрд╕ рдЕрдкрдбреЗрдЯ" рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ ...
@vlcinsky рдЬрдмрдХрд┐ рдореИрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдмреАрдЪ рдорддрднреЗрджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдмрд┐рдВрджреБ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, "рдкреНрд░рддрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдПрдХ рд▓реЙрдХ рдлрд╝рд╛рдЗрд▓" рддрд░реНрдХ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░реЙ рдореИрди рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЖрдк рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдкрд░рд┐рд╡реЗрд╢реЛрдВ рдХреЗ рдмреАрдЪ рд▓реЙрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред
рдПрдХ рдЦреБрд▓рд╛ рдкреНрд░рд╢реНрди рдЬрд┐рд╕рдХрд╛ рдЙрддреНрддрд░ рдЕрднреА рддрдХ рдХрд┐рд╕реА рдиреЗ рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЙрд╕ рдорд╛рдорд▓реЗ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВ рдЬрд╣рд╛рдВ рдЖрдк рджреЛрдиреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдФрд░ рдЕрдкрдиреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд▓реЙрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ tox
рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ tox
рдФрд░ pipenv
рдмреАрдЪ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧреЛрдВрдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИред
@ рдореЛрд░рд┐рддреНрдЬрд╝90
Pipfile.lock
рд╕реНрдЯреНрд░реЙ рдореИрди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡реЗрд░рд┐рдПрдВрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ (рджреВрд╕рд░реЛрдВ рдХреЛ рдЕрдкрдиреЗ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рджреВрд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП):
рдореИрдВрдиреЗ flask
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓рд┐рдпрд╛ (рдЗрд╕реЗ рдмрд╣реБрдд рдкрд░рд┐рдкрдХреНрд╡ рдорд╛рдирддреЗ рд╣реБрдП) рдФрд░ рдЯреЙрдХреНрд╕ рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рдП:
рдпрд╣рд╛рдВ рдЖрдк рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рд╡реЗрд░рд┐рдПрдВрдЯ рдХреА рд╕реВрдЪреА рджреЗрдЦрддреЗ рд╣реИрдВ (рдХреЗрд╡рд▓ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд▓рд┐рдирдХреНрд╕ рдкрд░, рдЗрд╕реЗ рд╡рд┐рдВрдбреЛрдЬрд╝ рдХреЗ рд░реВрдк рдореЗрдВ 3 рд╕реЗ рдЧреБрдгрд╛ рдХрд░реЗрдВ рдФрд░ рдУрдПрд╕рдПрдХреНрд╕ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдПрдХ рд╣реА рд╕реЗрдЯ рдХрд░реЗрдЧрд╛ рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ)ред
рдПрдХ рдУрдПрд╕ рдкрд░ 16 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯреЗрд╕реНрдЯ рд░рди рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ 5 рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдП рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ (рдпрд╣ рдареАрдХ рд╣реИ), рдПрдХ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдбреЙрдХ рд╕реЗ рдирд┐рдкрдЯ рд░рд╣рд╛ рд╣реИ (рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрдореНрдкреЛрд░реНрдЯреЗрдмрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) рдФрд░ рджреВрд╕рд░рд╛ рдПрдХ рдХрд╡рд░реЗрдЬ (рдЬрд┐рд╕реЗ рдЗрдореНрдкреЛрд░реНрдЯреЗрдмрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) ):
coverage-report: commands succeeded
docs-html: commands succeeded
py27-devel: commands succeeded
py27-lowest: commands succeeded
py27-simplejson: commands succeeded
py27: commands succeeded
py35: commands succeeded
py36-devel: commands succeeded
py36-lowest: commands succeeded
py36-simplejson: commands succeeded
py36: commands succeeded
ERROR: py34: InterpreterNotFound: python3.4
ERROR: pypy-devel: InterpreterNotFound: pypy
ERROR: pypy-lowest: InterpreterNotFound: pypy
ERROR: pypy-simplejson: InterpreterNotFound: pypy
ERROR: pypy: InterpreterNotFound: pypy
рдмрдирд╛рдП рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ requirements.txt
рдлрд╝рд╛рдЗрд▓ pip freeze > {venv_name}.txt
рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рд╣реИ
рдлрд┐рд░ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рд╣реИрд╢ рдорд╛рдиреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рднреА рдХреЛ рд╕рдореВрд╣реАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣рд╛рдБ рд╕реНрдЯреНрд░реЙрдореИрди рдЖрддрд╛ рд╣реИ:
b231a4cc8f30e3fd1ca0bfb0397c4918f5ab5ec3e56575c15920809705eb815e py35.txt
b231a4cc8f30e3fd1ca0bfb0397c4918f5ab5ec3e56575c15920809705eb815e py36.txt
cdf69aa2a87ffd0291ea65265a7714cc8c417805d613701af7b22c8ff2b5c0e4 py27-devel.txt
dfe27df6451f10a825f4a82dfe5bd58bd91c7e515240e1b102ffe46b4c358cdf py36-simplejson.txt
e48cd24ea944fc9d8472d989ef0094bf42eb55cc28d7b59ee00ddcbee66ea69f py36-lowest.txt
f8c745d16a20390873d146ccb50cf5689deb01aad6d157b77be203b407e6195d py36-devel.txt
053e107ac856bc8845a1c8095aff6737dfb5d7718b081432f7a67f2125dc87ef docs-html.txt
45b90aa0885182b883b16cb61091f754b2d889036c94eae0f49953aa6435ece5 py27-simplejson.txt
48bd0f6e66a6374a56b9c306e1c14217d224f9d42490328076993ebf490d61b5 coverage-report.txt
564580dad87c793c207a7cc6692554133e21a65fd4dd6fc964e5f819f9ab249c py27.txt
8b8ff4633af0897652630903ba7155feee543a823e09ced63a14959b653a7340 py27-lowest.txt
рдПрдХ рдбрд░рд╛рд╡рдирд╛, рд╣реИ рдирд╛? рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ, рдХреЗрд╡рд▓ рджреЛ рд╕рдорд╛рди рдЬрдореЗ рд╣реБрдП рдирд┐рд░реНрднрд░рддрд╛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдЕрдЪреНрдЫреЗ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рдпрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рд╣реИред рдЕрдм рдЖрдк рд╢рд╛рдпрдж рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдпрд╣ рдЙрджреНрдпрдо рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдкрд╛рдпрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдХреБрдЫ рдЕрд▓рдЧ рд╣реИред
jinja2
рдЬрд╛рдБрдЪ рдХрд░рдирд╛, рдЬреЛ рдХрд┐ рдмрд╣реБрдд рд╕рд░рд▓ рдЬрд╛рдирд╡рд░ рд▓рдЧрддрд╛ рд╣реИ:
coverage-report: commands succeeded
py26: commands succeeded
py27: commands succeeded
py33: commands succeeded
py35: commands succeeded
py36: commands succeeded
ERROR: docs-html: commands failed
ERROR: py34: InterpreterNotFound: python3.4
ERROR: pypy: InterpreterNotFound: pypy
рдЪреЗрдХрд╕рдо рджреЗрдЦрдХрд░ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ py27.txt рдФрд░ py26.txt рднрд┐рдиреНрди рд╣реИрдВ:
047a880804009107999888a3198f319e5bbba2fa461b74cfdfdc81384499864e py26.txt
047a880804009107999888a3198f319e5bbba2fa461b74cfdfdc81384499864e py33.txt
047a880804009107999888a3198f319e5bbba2fa461b74cfdfdc81384499864e py35.txt
047a880804009107999888a3198f319e5bbba2fa461b74cfdfdc81384499864e py36.txt
48bd0f6e66a6374a56b9c306e1c14217d224f9d42490328076993ebf490d61b5 coverage-report.txt
743ad9e4b59d19e97284e9a5be7839e39e5c46f0b9653c39ef8ca89c7b0bc417 py27.txt
@vlcinsky рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбрд░рд╛рд╡рдирд╛ рд╣реИред рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдлреНрд▓рд╛рд╕реНрдХ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИ рдпрд╛ рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрджрд░реНрд╢ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдЧрд▓рдд рд╕рд╛рдмрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИред
рдореИрдВ рдЕрдм рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рдорд╛рд░реА рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд┐рд╕реА рджрд┐рди рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЧреНрд░рд╕реНрдд рдирд╣реАрдВ рд╣реЛрдЧреА рдФрд░ рд╡рд╣рд╛рдВ рдорддрднреЗрдж рдЕрдзрд┐рдХ рдкреНрд░рдмрдВрдзрдиреАрдп рд╣реЛрдВрдЧреЗред
@ Moritz90 рдЖрдкрдХреА рдЖрдВрддрд░рд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рджрд░реНрд╢рдХреЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░ рд░рд╣реА рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕рдВрдХреАрд░реНрдг рд░рдЦ рд╕рдХреЗрдВред
рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рдпрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдХреНрд╕рд░ рд▓рдЪреАрд▓реЗ рдФрд░ рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп рд╣реЛрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдлреНрд▓рд╛рд╕реНрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЬреЛрдВрд╕ рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЕрд▓рдЧ рдкрд░реАрдХреНрд╖рдг рд░рди рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдП рдЧрдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдлреНрд▓рд╛рд╕реНрдХ рдХреЗ tox.ini
рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдЯреЙрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд╕реАрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рд╕рдмрд╕реЗ рдкреБрд░рд╛рдиреЗ рдирд┐рд░реНрднрд░рддрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЦрд┐рд▓рд╛рдл рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдХрдо рдкрд░реАрдХреНрд╖рдг рд╕рдВрд╕реНрдХрд░рдг рдзреНрдпрд╛рди рд░рдЦрддреЗ рд╣реИрдВред
рдбреЗрд╡реЗрд▓ рдХреЛрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЦрд┐рд▓рд╛рдл рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реИред
рдореИрдВ рдХрд╣реВрдВрдЧрд╛, рдлреНрд▓рд╛рд╕реНрдХ рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рд╣реИ рдФрд░ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдкрд┐рд░рд╛рдорд┐рдб рдХрд╛ tox.ini рд╕рдорд╛рди рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд╛рддрд╛рд╡рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ (рдЙрдирдХрд╛ рд▓рдХреНрд╖реНрдп 100% рдХреЛрдб рдХрд╡рд░реЗрдЬ рднреА рд╣реИ)ред
рдорд╛рдпрд╛ рдХрд╛ tox.ini рдмрд╣реБрдд рддрд╛рдЬрд╝рд╛ (2 рджрд┐рди) рдФрд░ рд╕рд░рд▓ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдпрд╣рд╛рдВ 4 рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИрдВ рдФрд░ py27 py35 рдФрд░ py36 рд╕реЗ рдЬрдореА рд╣реБрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдореЗрдВ рднрд┐рдиреНрди рд╣реИред
@ рдореЛрд░рд┐рддреНрдЬрд╝90
рдкрд┐рдкреЗрдирд╡ рдФрд░ рдЯреЙрдХреНрд╕ рдХреЗ рдмреАрдЪ рдЧреЛрдВрдж рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ
pipenv --man
рдХреБрдЫ рдирд┐рд░реНрджреЗрд╢ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, pipenv
рднреАрддрд░ tox.ini
рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВtox.ini
рдлрд╝рд╛рдЗрд▓ рдордирдорд╛рдиреА рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ pipenv
ред
pipenv
рдореЗрдВ рдмрдбрд╝реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдХрд┐ рдЬрдм рдкрд╣рд▓реЗ рд╕реЗ рд╕рдХреНрд░рд┐рдп рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ (рдЯреЙрдХреНрд╕ рдЖрдзрд╛рд░рд┐рдд рдкрд░реАрдХреНрд╖рдг рдХреЗ рднреАрддрд░ рдорд╛рдорд▓рд╛ рдХреНрдпрд╛ рд╣реИ) рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рджрд┐рдП рдЧрдП рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡реА рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИред
рдЪреВрдВрдХрд┐ рд╣рдореЗрдВ рд╕рдВрднрд╡рддрдГ Pipfile.lock
рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдЙрдЪрд┐рдд рд╕реНрдерд╛рди рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдпрд╛рд╕ рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░реАрдХреНрд╖рдг рджреНрд╡рд╛рд░рд╛ рдУрд╡рд░рд░рд╛рдЗрдЯрд┐рдВрдЧ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП .tox/py36/Pipfile.lock
ред рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╕рд░рд▓реАрдХрд░рдг рд╕реНрд╡рд╛рдЧрдд рд╣реЛрдЧрд╛ред рд╢рд╛рдпрдж Pipfile
рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЪрд╛рд▓ рдЗрд╕реЗ рдФрд░ рднреА рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрдЧреАред
@vlcinsky
pipenv install -e .
рдЪрд▓рд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ setup.py рдХреЛ рдЕрдм рдЖрдкрдХреА рд▓реЙрдХрдлрд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдФрд░ рдлрд┐рд░ рдЬрдм рднреА рдЖрдк setup.py рдореЗрдВ рдирдП рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ pipenv install
рдЪрд▓рд╛рдПрдВредpipenv --deploy
рдЗрд╕реЗ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕реЗ рдЕрдкрдиреЗ рд╕реАрдЖрдИ рдореЗрдВ рдЪрд▓рд╛рдПрдВ!update-all-lockfiles.sh
рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ CI рдкрд░ pipenv --deploy
рд╕рдХрддреЗ рд╣реИрдВред@ Moritz90 - рд╕рд╣рдордд, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ "рджреЛ рдЪрд░рдг" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рд▓реЙрдХрдлрд╛рдЗрд▓ рдореЗрдВ рдЬрд╛рдирдмреВрдЭрдХрд░/рдЬрд╛рдирдмреВрдЭрдХрд░ "рдореИрдиреБрдЕрд▓" рдЕрдкрдбреЗрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИред
рдЕрдзрд┐рдХ рдЖрдо рддреМрд░ рдкрд░, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ "рдкреНрд░рд╕реНрддрд╛рд╡" рдЙрди рдЪреАрдЬреЛрдВ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдард┐рди рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ (рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ, рдпрд╣ (рдП) рдХрдИ рдПрдирд╡реАрдПрд╕ рдХреА рд╕реЗрд╡рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, (рдмреА) рдЕрдкрд╕реНрдЯреНрд░реАрдо рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдкрдХрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ)ред рдпрд╣ рдХреНрд╖рдгрд┐рдХ рдЪреАрдЬреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдкрд┐рдкреЗрдирд╡ рдореЗрдВ рдмрдЧ) рдпрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рдЧрд▓рддрдлрд╣рдореА рдХрд┐ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдЙрди "рдХрдард┐рди" рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА, рдлрд╝реНрд░реЗрдорд┐рдВрдЧ рдЗрд╕ рддрд░рд╣ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП "рдХреБрдЫ рдЬрдЯрд┐рд▓ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдореВрд▓ рдкрд┐рдкреЗрдирд╡ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╣реИ"ред рдЖрдИрдПрдордУ, рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдпрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдХреНрдпреЛрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧреЛрдВ рдХреЛ рд╡реЗ рдЪрд┐рдВрддрд╛рдПрдВ рдирд╣реАрдВ рд╣реЛрдВрдЧреА)ред
рдпрджрд┐ Pipenv/Pipfile lib-dependencies
, app-dependencies
рдФрд░ dev-dependencies
рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рддреЛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдЙрджрд╛рд╣рд░рдг @vlcinsky рд╕рд░рд▓ рдФрд░ рдХрдо рднреНрд░рдорд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдбреЙрдХреНрд╕ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
рдпрджрд┐ рдЖрдк рдкреИрдХреЗрдЬ рдПрдХ рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рддреЛ lib-dependencies
рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг Pipfile
:
[lib-dependencies]
some-lib=="*"
another-lib=="*"
yet-another-one==">=1.0"
[dev-dependencies]
some-dev-tool=="1.1"
рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╕рдВрд╕реНрдХрд░рдг рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЛ [lib-dependencies]
рддрд╣рдд рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдЪреМрдбрд╝рд╛ рд░рдЦрд╛ рдЬрд╛рдП, рддрд╛рдХрд┐ рдЙрдкрднреЛрдХреНрддрд╛ рдкреНрд░рдгрд╛рд▓реА рдкрд░ рд╕рдВрд╕реНрдХрд░рдг рд╡рд┐рд░реЛрдзреЛрдВ рдХреЛ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХреЗред
рдпрджрд┐ рдЖрдкрдХрд╛ рдкреИрдХреЗрдЬ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ (рд▓рдХреНрд╖рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдкрд░ pipenv рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ) рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рдЯреАрдХ рдирд┐рд░реНрднрд░рддрд╛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдЖрдкрдХреЛ [app-dependencies]
рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг Pipfile
:
[app-dependencies]
some-lib=="1.0.12"
another-lib=="1.*"
yet-another-one=="2.0"
[dev-dependencies]
some-dev-tool=="1.1"
/ рдЕрдВрдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЙрджрд╛рд╣рд░рдг
рдПрдХ рдЕрдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг Pipfile.lib
рдФрд░ рдПрдХ Pipfile.app
ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреБрдЫ рдЕрдВрддрд░ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдВрдЯреА-рдкреИрдЯрд░реНрди рдЕрдиреБрднрд╛рдЧреЛрдВ рдФрд░ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдЯреВрд▓ рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдЧрд╛ред
рдкрд┐рдкреЗрдирд╡ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдЯреВрд▓ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рднреНрд░рд╛рдордХ рд╣реИ рдпрджрд┐ рдХреЛрдИ рдпрд╣ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдЕрдЬрдЧрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЙрдирдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдмрд╣реБрдд рднреНрд░рдо рд╣реЛрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ рдЬреЛ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ (рдЬреИрд╕реЗ JS, Rust, Elm) рдореЗрдВ рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреЛ рдкреИрдХреЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЬрдм рддрдХ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рдирд╣реАрдВ рд╣реБрдЖ рдХрд┐ рдореИрдВ Pipenv рдФрд░ setup.py рдХрд╛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛, рддрдм рддрдХ рдореБрдЭреЗ рдХрдИ рдорд╣реАрдиреЗ рдФрд░ рдХрднреА-рдХрднреА GITHub рдореБрджреНрджреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рд▓рдЧ рдЧрдПред
@ рдлреЗрд▓рдХреНрд╕
рдЖрдкрдХрд╛ [lib-dependencies]
рдпрд╛ Pipfile.lib
рд╡рд╣ рд╣реИ рдЬреЛ рдЖрдЬ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Pipfile
(рдЕрдореВрд░реНрдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ - рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдЪреМрдбрд╝рд╛)ред
рдЖрдкрдХрд╛ [app-dependencies]
рдпрд╛ Pipfile.app
рд╡рд╣ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Pipfile.lock
(рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ) рдореЗрдВ рд╣реИред
pipenv
рдФрд░ рдЗрд╕рдХреА рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдпрд╛ рдПрдХ рдЖрд╡реЗрджрди рдкрд░рд┐рдирд┐рдпреЛрдЬрди рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рде рдирд╣реАрдВред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рдореБрдЭреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЛ Pipenv
рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдордЬрдмреВрдд рдХрд╛рд░рдг рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдЬрд╛рдирдирд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╣реИ рдХрд┐ Pipfile
рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдкреВрд░рд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдмрд╣реБрдд рднреНрд░рдо рд╣реЛрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ рдЬреЛ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ (рдЬреИрд╕реЗ JS, Rust, Elm) рдореЗрдВ рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреЛ рдкреИрдХреЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЬрдм рддрдХ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рдирд╣реАрдВ рд╣реБрдЖ рдХрд┐ рдореИрдВ Pipenv рдФрд░ setup.py рдХрд╛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛, рддрдм рддрдХ рдореБрдЭреЗ рдХрдИ рдорд╣реАрдиреЗ рдФрд░ рдХрднреА-рдХрднреА GITHub рдореБрджреНрджреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рд▓рдЧ рдЧрдПред
рдорд╛рдирд╛ред рддреАрди-рдЦрдВрдб рд╕рдорд╛рдзрд╛рди рднреА рдПрдХ рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдХрднреА рдирд╣реАрдВ рдорд╛рдирд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕рд╣реА рдФрд░ (рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ!) рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИред
рдЦреБрдж рдПрдХ рдкрд╛рдпрдерди рдкреГрд╖реНрдарднреВрдорд┐ рд╕реЗ рдЖрддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рд╣рдореЗрд╢рд╛ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ Node's package.json рдЗрд╕реЗ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реИ (рдЬрдВрдЧ рдмреЗрд╣рддрд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдФрд░ рд▓рд┐рдВрдХрд░ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдмрд╛рдж рдХреЗ рдЪрд░рдг рдореЗрдВ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред рдРрдк рдФрд░ lib рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рдЗрд▓рд╛рдЬ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдкрд╛рдЗрдерди рдЬреИрд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЕрдореВрд░реНрдд рдЕрд░реНрде рдореЗрдВ-рдпрд╛рдиреА рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд┐рдкреЗрдирд╡ рдЬреИрд╕рд╛ рд╕рд╛рдорд╛рдиреНрдп рдЯреВрд▓ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рд╕рд╛рдорд╛рдиреНрдпред
рдЬрдмрдХрд┐ рдореБрдЭреЗ рдЕрд╡рдзрд╛рд░рдгрд╛ рдореЗрдВ рддреАрди-рдЦрдВрдб рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рд╣реИ, рдпрд╣ рдЕрднреА рднреА рдореМрдЬреВрджрд╛ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдПрдХ рдЕрд╕рдВрдЧрдд рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред рдЗрд╕ рд╕реНрдерд╛рди рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА setup.py, setup.cfg, рдФрд░ (рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ) pyproject.toml рдореМрдЬреВрдж рд╣реИрдВред рдпрджрд┐ рдкрд┐рдкреЗрдирд╡ (рдкрд┐рдкрдлрд╛рдЗрд▓, рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП) рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдореЗрдХрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдкрд╛рдЗрдк (рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рдорд░реНрдерди рдХреЛ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╕реАрдзреЗ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) рдФрд░ рдлрд╝реНрд▓рд┐рдЯ ред
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ lib/app рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЕрдиреНрдп рдореБрджреНрджреЛрдВ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЛ pypa-dev (рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА) рдФрд░/рдпрд╛ рдкреАрдИрдкреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдкрд┐рдкреЗрдирд╡ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдиреНрдп рдкрд╛рд░реНрдЯрд┐рдпреЛрдВ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЗрд╕реЗ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕реБрдирд╛ рдЬрд╛ рд╕рдХреЗред (рдкрд┐рдкрдлрд╛рдЗрд▓) рдХрд┐рд╕реА рднреА рджрд┐рд╢рд╛ рдореЗрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
@vlcinsky
рдЖрдкрдХреА [lib-рдирд┐рд░реНрднрд░рддрд╛] рдпрд╛ Pipfile.lib рд╡рд╣ рд╣реИ рдЬреЛ рдЖрдЬ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд┐рдкрдлрд╛рдЗрд▓ рдореЗрдВ рд╣реИ (рдЕрдореВрд░реНрдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ - рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдЪреМрдбрд╝рд╛)ред
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ред рдореЗрд░рд╛ lib-dependencies
рд╡рд╣реА рд╣реИ рдЬреЛ рд▓реЛрдЧ рд╡рд░реНрддрдорд╛рди рдореЗрдВ setup.py
/ install_requires
рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВред рд╢рд╛рдпрдж pypi-dependencies
рдореЗрд░реЗ рдорддрд▓рдм рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ рдирд╛рдо рд╣реЛрдЧрд╛ред
@uranusjr
рдЗрд╕ рд╕реНрдерд╛рди рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА setup.py, setup.cfg, рдФрд░ (рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ) pyproject.toml рдореМрдЬреВрдж рд╣реИрдВред
рдкрд┐рдкреЗрдирд╡ (рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЯреВрд▓) рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ setup.py
ред рдмрд╕ setup.py
рдХреЗ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рд╕реЗрдХреНрд╢рди рдХреЛ рдкрд┐рдкрдлрд╛рдЗрд▓ рдореЗрдВ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдХрдо рд╕реЗ рдХрдо рдореЗрд░реА рдХрд▓реНрдкрдирд╛ рдореЗрдВ :)
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ lib/app рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЕрдиреНрдп рдореБрджреНрджреЛрдВ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЛ pypa-dev (рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА) рдФрд░/рдпрд╛ рдкреАрдИрдкреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдкрд┐рдкреЗрдирд╡ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдиреНрдп рдкрд╛рд░реНрдЯрд┐рдпреЛрдВ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЗрд╕реЗ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕реБрдирд╛ рдЬрд╛ рд╕рдХреЗред (рдкрд┐рдкрдлрд╛рдЗрд▓) рдХрд┐рд╕реА рднреА рджрд┐рд╢рд╛ рдореЗрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдареАрдХ рд╣реИ, рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ;) рдЕрдЧрд░ рдореБрдЭреЗ рдХреБрдЫ рд╕рдордп рдорд┐рд▓рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд▓рд┐рдЦреВрдВрдЧрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ, рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рдХрд┐ рдкреВрд░реЗ рдкрд╛рдпрдерди рдкреИрдХреЗрдЬрд┐рдВрдЧ рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдЦрд░рдЧреЛрд╢ рдХреЗ рдЫреЗрдж рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдВрднрд╡ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВред рдореМрдЬреВрджрд╛ рдмрд╛рдзрд╛рдУрдВ рдХреЗ рднреАрддрд░ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрдирд╛ рдФрд░ рдлрд┐рд░ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдЪрд░реНрдЪрд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
@uranusjr - рдореИрдВ "рд╕рдВрдХрд▓рд┐рдд" рдкреГрд╖реНрдарднреВрдорд┐ рд╕реЗ рдЖрдпрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИ?
рдРрдк рдФрд░ lib рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рдЗрд▓рд╛рдЬ рдЙрд╕реА рддрд░рд╣ рдкрд╛рдЗрдерди рдЬреИрд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛
@ tsiq-oliverc рдЪреВрдВрдХрд┐ рдРрдк рдХреЗ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдкрдиреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдкрд┐рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рднреА рдЙрдиреНрд╣реЗрдВ рдкрд┐рди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреЗ, рдпрджрд┐ рд╡реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рдорд╛рди рд╕реНрд░реЛрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рд╣реЛрдВрдЧреАред
рдорд╛рди рд▓реЗрдВ рдХрд┐ рдореЗрд░реЗ рдРрдк рдореЗрдВ рджреЛ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ A рдФрд░ B рд╣реИрдВ, рджреЛрдиреЛрдВ рд╣реА C рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди A рдкрд┐рди v1, рдЬрдмрдХрд┐ B рдкрд┐рди v2ред рд╕рдВрдХрд▓рд┐рдд рднрд╛рд╖рд╛рдПрдБ рдЯреВрд▓рдЪреЗрди рдХреЛ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рдЗрд╕реЗ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд╕реНрдЯ рд▓рд┐рдВрдХрд┐рдВрдЧ рд╕рдордп рдХреЗ рджреМрд░рд╛рди рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИтАФрдЕрдВрддрд┐рдо рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдореЗрдВ C (v1 рдФрд░ v2) рдХреА рджреЛ рдкреНрд░рддрд┐рдпрд╛рдВ рд╣реЛрдВрдЧреА, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд╕рд╛рде A рдФрд░ B рд▓рд┐рдВрдХ рд╣реЛрдВрдЧреЗред рд╕реА ++ рднреВрдорд┐ рдореЗрдВ рдЗрд╕реЗ рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛; рдкреНрд░рддреАрдХ рд▓реБрдХрдЕрдк рдмрд╛рдж рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд░рдирдЯрд╛рдЗрдо рдкрд░), рд▓реЗрдХрд┐рди рд╡рд┐рдЪрд╛рд░ рд╡рд╣реА рд╣реИ-рд╕рдВрдХрд▓рдХ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП (рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ), рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛рдПрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреА рдХрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЙрд▓ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛ред рдиреЛрдб рд╣рдореЗрд╢рд╛ рдпрд╣ рдорд╛рдирдХрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдЕрд╕рдВрдЧрдд рд╣реИрдВ (рдП рдФрд░ рдмреА рд╣рдореЗрд╢рд╛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рджреЛ рдкреНрд░рддрд┐рдпрд╛рдВ рд╕рдорд╛рди рд╣реЛрдВ), рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЕрдЬреАрдм рд╣реИрдХ рдЬреИрд╕реЗ рд╕рд╣рдХрд░реНрдореА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣рд░ рдХреЛрдИ (рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ?) рд╕рд╣рдордд рднрдпрд╛рдирдХ рд╣реИрдВред рдкрд╛рдЗрдерди рд╢рд╛рдпрдж рд╡рд╣рд╛рдВ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ (рд╡реИрд╕реЗ рднреА, рдпрд╣ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рд╕рднреА рдореМрдЬреВрджрд╛ рдкрд╛рдпрдерди рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдЯреВрдЯ рдЬрд╛рдПрдВрдЧреЗ)ред
рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдЯреВрд▓ рдореЗрдВ рдХреБрдЫ рдЪрддреБрд░ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдирд┐рд░реНрднрд░рддрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ "рдЕрдирдкрд┐рди" рдХрд░рддрд╛ рд╣реИред рдмрдВрдбрд▓рд░ (рд░реВрдмреА рдХрд╛) рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЛрдЧреЛрдВ рдХреЛ рдордгрд┐ рдореЗрдВ рд▓реЙрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рди рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рдХреЗ, рдЗрд╕рд▓рд┐рдП рдмрдВрдбрд▓рд░ Gemfile.lock рдореЗрдВ рдкрд┐рди рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмрдЬрд╛рдп Gemfile рдореЗрдВ рдЕрдирдкрд┐рди рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд▓реЛрдЧ рд╕рд▓рд╛рд╣ рдХреЛ рдирдЬрд╝рд░рдЕрдВрджрд╛рдЬрд╝ рдХрд░ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЬреЛ рдЪрд╛рд╣реЗрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрднреА рднреА рд╣рд░ рдЬрдЧрд╣ рдкрд┐рди рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рдорд┐рд▓рддреЗ рд╣реИрдВред
рдореИрдВ рд╢рд╛рдпрдж рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдмрд╣реБрдд рдордЬрдмреВрдд рдерд╛ рдХрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ ред рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдкрд┐рдЫрд▓реЗ рд╕рднреА рдкреНрд░рдпрд╛рд╕ рд╡рд┐рдлрд▓ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдмрд╣реБрдд рдЪрддреБрд░ рд▓реЛрдЧ рд╣реИрдВ, рдЦреБрдж рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЪрд╛рд▓рд╛рдХ рд╣реИрдВред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕реЛрдЪрдирд╛ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдореИрдВ рдмрд╣реБрдд рд╢рд╛рдирджрд╛рд░ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд░рддрд╛ рд╣реИред
@ tsiq-oliverc рдкреАрдЯрд░ рд╣рд┐рдВрдЯрдЬреЗрдВрд╕ рдиреЗ рдХрд╣реАрдВ рди рдХрд╣реАрдВ "рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡рд╛рдЧрдд рд╣реИ" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд▓рд┐рдЦреА рд╣реИред
рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджрд╛рд░реНрд╢рдирд┐рдХ рд╕рд▓рд╛рд╣ рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореВрд░реНрдд рдФрд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЪреАрдЬреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рднреА рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЯрд┐рдкреНрдкрдгреАрдХрд╛рд░ рдЕрдХреНрд╕рд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕реАрдЦрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдЪрд╛рд░ рдЕрдзреВрд░рд╛ рд╣реИ рдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИред
рдореИрдВрдиреЗ рдЖрдкрд╕реЗ рдЕрдЬрдЧрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдорд╛рдВрдЧрд╛, рдЬрд╣рд╛рдВ pipenv
рдареАрдХ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рдЖрдкрдиреЗ рдХреЛрдИ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдЖрдк tox
рдЧреБрдгреЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЗрд╕рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдлрд┐рд░ рднреА рдкрд╛рдЗрдерди рдкреИрдХреЗрдЬ рд╡рд┐рдХрд╛рд╕ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рджреЛрд╣рд░рд╛ рд░рд╣реЗ рд╣реИрдВред
рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ Flask
рд╕рдВрднрд╡рддрдГ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ "рд▓рд╛рдЗрдмреНрд░реЗрд░реА" рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдЬрдЧрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬреАрдердм рдХреА рдЦреЛрдЬ рдХреА, рдЬреЛ рдХрд┐ рдХрд╛рдВрдЯреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреНрд░рдордмрджреНрдз рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рд╢рд╛рдпрдж рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рддрдиреЗ рд▓реЛрдЧ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╡рд┐рдХрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ), рд╕рднреА "рдХрд┐рд╕реА рдЪреАрдЬ рдХреА рдХреНрдпреВрд░реЗрдЯреЗрдб рд╕реВрдЪреА" рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдПрдХ рдХреЗ рд▓рд┐рдП рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХреАред рдУрдПрд╕ (рдЖрдорддреМрд░ рдкрд░ рд▓рд┐рдирдХреНрд╕):
рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЕрдзрд┐рдХрддрд░ 2 (+Windows) рдпрд╛ 3 (+OSX) рдЧреБрдирд╛ рдЕрдзрд┐рдХ рд╣реЛрдЧреАред
tox
рдХрд╛ рдЙрдкрдпреЛрдЧ
рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрдзрд┐рдХ рд╣реИ, рдлреНрд▓рд╛рд╕реНрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдмрд╕реЗ рдЬрдВрдЧрд▓реА рдирд╣реАрдВ рд╣реИред
рдирд┐рд╢реНрдЪрд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рдмрдВрдзрдиреАрдп рдирд╣реАрдВ рд╣реИред
рдмрд╕ Pipfile.lock
рдХреЛ рдПрдХ рднрдВрдбрд╛рд░ рдореЗрдВ рдЫреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрдИ рдЬрд╛рджреВ рд╕реБрдзрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдпрджрд┐ рд╣рд╛рдВ, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рджреГрд╢реНрдп рджрд┐рдЦрд╛рдПрдВ, рдЬрдм рдпрд╣ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдЧрд╛)ред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк "рд╕рдВрдХрд▓рд┐рдд" рджреБрдирд┐рдпрд╛ рд╕реЗ рд╕реБрдирд╣рд░рд╛ рдирд┐рдпрдо рдЬрд╛рдирддреЗ рд╣реЛрдВ рдФрд░ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реЛрдВ рдХрд┐ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж (рдпрд╛ рджреЛрд╣рд░рд╛рд╡) рднреА рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЬрд░реВрд░реА рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдИ рдкрд╛рдпрдерди рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рд░рд╣рддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕реБрдирд╣рд░рд╛ рдирд┐рдпрдо рдпрд╣рд╛рдВ рдЗрддрдиреА рд╕рдЦреНрддреА рд╕реЗ рд▓рд╛рдЧреВ рди рд╣реЛред
рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА, рдЕрдЧрд░ рд╣рдореЗрдВ рдЕрдЬрдЧрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП pipenv
рдЙрдкрдпреЛрдЧ рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдЧрд╛ред рдФрд░ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХреЛ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рд╕рдордЧреНрд░ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЛ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛рдПрдЧрд╛ред
рдЙрд╕ рд▓рдХреНрд╖реНрдп рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рд╢реНрдиреЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдирд╛ рд╣реИ:
@ рдлреЗрд▓рдХреНрд╕
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ред рдореЗрд░реА lib-рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╡рд╣реА рд╣реИрдВ рдЬреЛ рд▓реЛрдЧ рд╡рд░реНрддрдорд╛рди рдореЗрдВ setup.py/install_requires рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдорддрд▓рдм рдХреЗ рд▓рд┐рдП pypi-рдирд┐рд░реНрднрд░рддрд╛ рдПрдХ рдмреЗрд╣рддрд░ рдирд╛рдо рд╣реЛрдЧрд╛ред
рдЗрд╕ рдЕрдВрдХ рдореЗрдВ pbr
рдЪрд░реНрдЪрд╛ рджреЗрдЦреЗрдВред рдпрд╣ рдкрд┐рдкрдлрд╛рдЗрд▓ рджреНрд╡рд╛рд░рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдХрд┐ рдПрдХ Pipfile
рдЙрдкрдпреЛрдЧ рджреЛ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ (lib рдФрд░ рдРрдк) рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпреЗ рдЪреАрдЬреЗрдВ рдЕрд▓рдЧ рд╕реЗ рдХреА рдЬрд╛рдПрдВрдЧреАред рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рдХрд╛рд╕ рдФрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХрд╛ рд╕рдордп рдореЗрдВ рдХрд╛рдлреА рдЕрд▓рдЧ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред
@vlcinsky рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХрд╣рд╛рдБ рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреАрдЖрд░ рдорд╛рдВрдЧ рд░рд╣реЗ рд╣реИрдВ!), рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП рдЗрд╕ рдмрд╛рддрдЪреАрдд рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред
рдореЗрд░реА рд╕реНрдерд┐рддрд┐ рдХреЗ рдЯреАрдПрд▓; рдбреАрдЖрд░ рдХреЛ рдкреБрди: рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
@uranusjr рд╕рдордЭ рдЧрдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рднрд╛рд╖рд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рд╕рдореБрджрд╛рдпреЛрдВ рдиреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдХреЗ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдиреБрдорд╛рдиреЛрдВ рдкрд░ рд╕рдордЭреМрддрд╛ рдХрд┐рдпрд╛ рд╣реИ - рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдШрд░реНрд╖ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдореЗрд╡реЗрди/рдЬрд╛рд╡рд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдЖрдкрдХреЛ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред NPM рддрд░реАрдХреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрджрд┐ рдмреЗрдореЗрд▓ рд╕рдВрд╕реНрдХрд░рдг рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдкрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд░рдирдЯрд╛рдЗрдо рд╕рдорд╕реНрдпрд╛рдПрдБ рд╣реИрдВред рд░рдирдЯрд╛рдЗрдо рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди (рдЬреИрд╕реЗ рдкрд╛рдпрдерди, рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА) рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдПрдХ рдЖрд╢реНрд░рд┐рдд рдХреНрд░реИрд╢/рдЖрджрд┐ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдирд┐рд░реНрднрд░рддрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреА рд╡рд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред
@vlcinsky
рдЗрд╕ рдЕрдВрдХ рдореЗрдВ pbr рдЪрд░реНрдЪрд╛ рджреЗрдЦреЗрдВред рдпрд╣ рдкрд┐рдкрдлрд╛рдЗрд▓ рджреНрд╡рд╛рд░рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╣реИред
pbr рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рд╕рднреА, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрд╕ рд╢реНрд░реЗрдгреА рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рдерд╛:
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреБрдЫ рдЕрдВрддрд░ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдВрдЯреА-рдкреИрдЯрд░реНрди рдЕрдиреБрднрд╛рдЧреЛрдВ рдФрд░ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдЯреВрд▓ рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдЧрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕реЗ рдЙрдкрдХрд░рдг рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рдХрд╛рд╕ рдФрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХрд╛ рд╕рдордп рдореЗрдВ рдХрд╛рдлреА рдЕрд▓рдЧ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред
рдЬрдм рдкреАрдкреАрдЖрдИ рдкреИрдХреЗрдЬ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рдореИрдВрдиреЗ рджреЗрд╡-рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдкреЗрдирд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛, Pipfile
рджреЗрд╡-рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, setup.py
install_requires
рдФрд░ setuptools
рд╕рд╛рде lib рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред setup.py
рдЪрд▓ рд░рд╣реЗ рдореЗрд░реЗ рдкреИрдХреЗрдЬ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП pipenv run python setup.py bdist_wheel upload
ред рдпрд╣реА рдореИрдВ рдЬрдЯрд┐рд▓ рдорд╛рдирддрд╛ рд╣реВрдВред
рдЕрдиреНрдп рдЖрдзреБрдирд┐рдХ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдореБрдЭреЗ рдПрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЯреВрд▓ (рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░) рдФрд░ рдПрдХ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдлрд╛рдЗрд▓ рдлреЙрд░реНрдореЗрдЯ рд╕реАрдЦрдирд╛ рд╣реИред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╣реИ рдФрд░ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдПрдХ рдирд╡рд╛рдЧрдВрддреБрдХ рдХреЛ рдпрд╣ рд╕рдм рдХреБрдЫ рдШрдВрдЯреЛрдВ рдореЗрдВ рд╕реБрд▓рдЭрд╛ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ npm init
, npm install foo --dev
, npm publish
ред рдкрд┐рдкреЗрдирд╡/рдкрд┐рдкрдлрд╛рдЗрд▓ рдЗрд╕рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рд╕рдм рдХреБрдЫ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдореБрджреНрджреЗ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред
рдореИрдВ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ "рд╕рдореБрджрд╛рдп" рдЕрдиреБрднрд╛рдЧ/рд╡рд┐рдХреА рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдХреЙрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВред рдХрдИ "рдкреИрдЯрд░реНрди" рд╡реИрдз рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдореЗрдВ рд╕реЗ рдХреБрдЫ рдЗрд╕реЗ "рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛" рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рдХреБрдЫ рдореЗрд░реЗ рдЬреИрд╕реЗ рдкреАрдмреАрдЖрд░ рдХреЗ рд╕рд╛рде, рдФрд░ рдЕрдиреНрдп рдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдкреИрдЯрд░реНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкрд┐рдкреЗрдирд╡ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдкреГрд╖реНрда, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред
рдкреБрдирд╢реНрдЪ: рдирдП pypi рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реБрддрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рди рдХрд┐ python setup.py рдЕрдкрд▓реЛрдб рдХрд╛ред "рдЕрдкрд▓реЛрдб" рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдПрдВрдЯреАрдкреИрдЯрд░реНрди рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкрд┐рдкреЗрдирд╡ "рдкреНрд░рдХрд╛рд╢рд┐рдд" рдХрдорд╛рдВрдб рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд╕рдХреЗ?
@feluxe рдЖрдк рдХрд╡рд┐рддрд╛ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдореИрдВ рдмрд╕ рдЗрд╕рдХреЗ рдкрд╛рд░ рдареЛрдХрд░ рдЦрд╛рддрд╛ рд╣реВрдВ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдпрд╣реА рдЦреЛрдЬ рд░рд╣реЗ рд╣реИрдВред
рдпрд╣ рд╡рд╣реА рдХрд░рддрд╛ рд╣реИ рдЬреЛ pipenv
рдХрд░рддрд╛ рд╣реИ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЗрд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдмреЗрд╣рддрд░ рдХрд░рддреЗ рд╣реИрдВ (рдХрдо рд╕реЗ рдХрдо рд╡реЗ рдпрд╣реА рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ)ред рдпрд╣ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрди, рдкреИрдХреЗрдЬрд┐рдВрдЧ рдФрд░ рд╕рднреА рдПрдХрд▓ рдЯреВрд▓ poetry
рдкреНрд░рдХрд╛рд╢рди рдХрд░рддрд╛ рд╣реИред
рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ pipenv
рдФрд░ poetry
рдЕрдВрддрддрдГ рдкрд╛рдпрдерди рдХреЛ рдПрдХ рд╕рдЪреНрдЪрд╛ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдпрд╣ рдЪрд░реНрдЪрд╛ рдмрд╣реБрдд рдЖрдЧреЗ рдмрдврд╝реЗ, рдореИрдВ рдЦреБрдж рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдкрд┐рдкреЗрдирд╡ рдХреЗрд╡рд▓ publish
рдХрдорд╛рдВрдб рдирд╣реАрдВ рдмрдврд╝рд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдбреНрдпреВрдЯреА рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЦрдВрдбрд┐рдд рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдХреЛрдИ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдРрдк рдФрд░ lib рдирд┐рд░реНрднрд░рддрд╛ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, рдЖрдк рдХрд┐рд╕реА рдХреЛ рдЙрдирдХреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рднреЗрдж рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдорд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред
рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд▓рдЧрднрдЧ рд╕рднреА рд▓реЛрдЧ рдЗрд╕ рд╡рд┐рд▓рдп рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдЪреНрдЪрд╛рдИ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдФрд░ рднреА рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЪреАрдЬреЗрдВ рдЙрдирдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ рдФрд░ рд╡реЗ рдХреБрдЫ рдФрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЗрд╕реЗ рдмрд╛рд░-рдмрд╛рд░ рдХрд╣рд╛ рд╣реИ: рдЯреВрд▓рдЪреЗрди рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╕реНрд╡рд░реВрдкреЛрдВ рдХреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдкрд╛рдпрдерди рдкреИрдХреЗрдЬрд┐рдВрдЧ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдзрд┐рдХ рдореМрд▓рд┐рдХ рдЪреАрдЬреЛрдВ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЬреЛрдЦрд┐рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкрд┐рдкреЗрдирд╡ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рд╡рд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВред рдпрд╣рд╛рдВ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХрд╛ рдХреЛрдИ рдлрд╛рдпрджрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд┐рдкреЗрдирд╡ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдирд╣реАрдВ рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕реЗ рдмрд╛рд░-рдмрд╛рд░ рдХрд╣рд╛ рд╣реИ: рдбреАрдЯреВрд▓рдЪреЗрди рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╕реНрд╡рд░реВрдкреЛрдВ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдкрд╛рдпрдерди рдкреИрдХреЗрдЬрд┐рдВрдЧ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдзрд┐рдХ рдореМрд▓рд┐рдХ рдЪреАрдЬреЛрдВ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЬреЛрдЦрд┐рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рди рдкрд░ рдкрд┐рдкреЗрдирд╡ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЗрд╕ рдмрдЧ рд╕рд░реНрдкрд┐рд▓ рдкрд░ рдЪрд░реНрдЪрд╛ рдЕрдм рдирд┐рдпрдВрддреНрд░рдг рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЧрдИ рд╣реИ рдХрд┐ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдФрд░ рдкреНрд░рдХрд╛рд╢рди рд╕рд╛рдордиреЗ рдЖрдпрд╛ (рдпрд╣ рдмрдЧ рдХреЗрд╡рд▓ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ!), рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдк рд╣рдореЗрдВ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ? рд▓реЛрдЧ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдЗрд╕рд▓рд┐рдП рд▓реЗ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдкрд┐рдкреЗрдирд╡ рдХреЛ рд╕рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рдЖрд╡рд╢реНрдпрдХ рдХрджрдо рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рд╡реЗ рдкрд┐рдкреЗрдирд╡ рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпрд╛рдВ рдереЛрдкрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ : рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВрдиреЗ рдЙрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдирдИ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рддреЗ рд╕рдордп рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рдХрд┐рдпрд╛ рдерд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ, рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рдХрд┐ рдкреВрд░реЗ рдкрд╛рдпрдерди рдкреИрдХреЗрдЬрд┐рдВрдЧ рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдЦрд░рдЧреЛрд╢ рдХреЗ рдЫреЗрдж рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдВрднрд╡ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВред рдореМрдЬреВрджрд╛ рдмрд╛рдзрд╛рдУрдВ рдХреЗ рднреАрддрд░ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрдирд╛ рдФрд░ рдлрд┐рд░ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдЪрд░реНрдЪрд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
рдореИрдВ рдЗрд╕рд╕реЗ рдмрд╣реБрдд рд╕рд╣рдордд рд╣реВрдВред рд╣рдо рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреЗрдЦрд░реЗрдЦ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдВрднрд╡ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рдЕрднреА рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдмрдбрд╝реА рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЖ рд░рд╣рд╛ рд╣реИред рддреЛ рдЪрд▓рд┐рдП рдЙрд╕ рдкрд░ рдлрд┐рд░ рд╕реЗ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдЗрд╕ рд╕реВрддреНрд░ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдЕрднреА рдХрд┐рд╕реА рдирддреАрдЬреЗ рдкрд░ рдкрд╣реБрдВрдЪреЗ рд╣реИрдВред
рд╡рд┐рд╖рдп рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ: рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ @uranusjr рдХреА рдкреЛрд╕реНрдЯ рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрддреЗ рд╣реБрдП:
рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдЯреВрд▓ рдореЗрдВ рдХреБрдЫ рдЪрддреБрд░ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдирд┐рд░реНрднрд░рддрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ "рдЕрдирдкрд┐рди" рдХрд░рддрд╛ рд╣реИред рдмрдВрдбрд▓рд░ (рд░реВрдмреА рдХрд╛) рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЛрдЧреЛрдВ рдХреЛ рдордгрд┐ рдореЗрдВ рд▓реЙрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рди рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рдХреЗ, рдЗрд╕рд▓рд┐рдП рдмрдВрдбрд▓рд░ Gemfile.lock рдореЗрдВ рдкрд┐рди рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмрдЬрд╛рдп Gemfile рдореЗрдВ рдЕрдирдкрд┐рди рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд▓реЛрдЧ рд╕рд▓рд╛рд╣ рдХреЛ рдирдЬрд╝рд░рдЕрдВрджрд╛рдЬрд╝ рдХрд░ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЬреЛ рдЪрд╛рд╣реЗрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрднреА рднреА рд╣рд░ рдЬрдЧрд╣ рдкрд┐рди рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рдорд┐рд▓рддреЗ рд╣реИрдВред
рдореИрдВ рд╢рд╛рдпрдж рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдмрд╣реБрдд рдордЬрдмреВрдд рдерд╛ рдХрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдкрд┐рдЫрд▓реЗ рд╕рднреА рдкреНрд░рдпрд╛рд╕ рд╡рд┐рдлрд▓ рд░рд╣реЗ рд╣реИрдВ
рдореИрдВ рдЕрднреА рднреА рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдЙрдирдХреЗ рд╕реАрдЖрдИ рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП pipenv
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди Pipfile.lock
рдХреЛ рд╕реНрд░реЛрдд рдирд┐рдпрдВрддреНрд░рдг рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦреЗрдВред рдЪреВрдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдиреЗ рдмрддрд╛рдпрд╛, pipenv
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдФрд░ рдореИрдВ рдпрд╣ рднреА рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдпрд╣ рдЖрдкрдХреА рдЕрдореВрд░реНрдд рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдЙрд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рддрд░реНрдХ рдХреНрдпреЛрдВ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЙрдирдХреА рдЕрдореВрд░реНрдд рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдареАрдХ рд╣реИ рдЕрдЧрд░ pipenv
Pipfile
рдХреЛ setup.py
рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╕рдорд╛рдзрд╛рди рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рдХреНрдпреЛрдВ рд╣реИред
@vlcinsky
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдХрд┐ рдПрдХ рдкрд┐рдкрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рджреЛ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ (lib рдФрд░ рдРрдк) рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпреЗ рдЪреАрдЬреЗрдВ рдЕрд▓рдЧ рд╕реЗ рдХреА рдЬрд╛рдПрдВрдЧреАред
рдореЗрд░реА рдЙрдкрд░реЛрдХреНрдд рдкреЛрд╕реНрдЯ рджреЗрдЦреЗрдВред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ? рдореИрдВ рдмрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдХреЛрдИ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд╣рд▓реВ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ред рдЕрднреА, Pipfile
рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдлрд┐рд░ рдЖрдкрдХреЛ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЙрд╕реА рддрд░рд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рд▓рд┐рдП Pipfile
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛ред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВ рдкрд╣рд▓реЗ рд╣реА рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ Pipfile.lock
рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдЙрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рди рд╣реЛрдВ рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рд╣реВрдВред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ : рд╕рд╛рде рд╣реА, рдЕрдЧрд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ pipenv
рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдВрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рддреЛ рдЖрдк app-dependencies
рдФрд░ lib-dependencies
рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдЧреЛ рдХреЗ crate-type
рдлрд╝реАрд▓реНрдб рдХреА рддрд░рд╣ рдХреБрдЫ рдкреЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ lib-dependencies
- рдпрд╣ рдЕрддреНрдпрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИред
@ Moritz90 рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЛ рдЖрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдХреА рдХрдИ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪрд┐рдпрд╛рдБ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рд╣реЛрдВрдЧреАред
рдкрд╛рдЗрдкрд╛-рджреЗрд╡ рдкрд╛рдпрдерди рдкреИрдХреЗрдЬрд┐рдВрдЧ рдФрд░ рдЙрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рдЪрд░реНрдЪрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд╣реИред рдЕрдЧрд░ рдореИрдВ рдЗрд╕реА рддрд░рд╣ рдХреА рдЪрд░реНрдЪрд╛ рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рддреЛ рд╢рд╛рдпрдж рдореИрдВ рдпрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рддрд╛ред
рдкрд╛рдпрдерди-рд╡рд┐рдЪрд╛рд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдЧрд╣ рд╣реИ, рдФрд░ рдкреВрд░реЗ рдкрд╛рдпрдерди рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЙрдЪреНрдЪ рджреГрд╢реНрдпрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рднреА рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдкреАрдИрдкреА рд╕реНрддрд░ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЕрдВрддрддрдГ рдЖрдк рдРрд╕рд╛ рдХрд░реЗрдВрдЧреЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ)ред
@tsiq-oliverc
рдкреАрдЖрд░ рд╕реЗ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ: рдЕрдкрдиреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдПрдВред
рддреЛ рдХреБрдЫ рдореМрдЬреВрджрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЙрдард╛рдУ, рдЗрд╕реЗ рдлреЛрд░реНрдХ рдХрд░реЗрдВ, рдЕрдкрдирд╛ (1) рд▓рд╛рдЧреВ рдХрд░реЗрдВ - рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ pipenv
рд╕рд╛рде рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ рдФрд░ рдореБрдЭреЗ рджрд┐рдЦрд╛рдУред рдореИрдВрдиреЗ рдмрд╣реБрдд рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдореБрд╢реНрдХрд┐рд▓реЗрдВ рдЖрдИрдВред
рдпрджрд┐ рдЖрдкрдХреЗ (2) рдХрд╛ рдЕрд░реНрде рд╣реИ "рдХрд┐рд╕реА рдФрд░ рдХреЛ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ", рддреЛ рдЖрдкрдХрд╛ рдкреАрдЖрд░ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
(3) рдореЗрдВ рдЖрдк рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛ рджрд┐рдП рдмрд┐рдирд╛ "рдорд╛рдорд▓реЛрдВ рдХреЗ рдЫреЛрдЯреЗ рдЙрдкрд╕рдореБрдЪреНрдЪрдп" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рднреА рд╢реАрд░реНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп "рдЫреЛрдЯрд╛ рд╕рдмрд╕реЗрдЯ" рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ?
рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЪрд░реНрдЪрд╛ рдХреЗ рджреМрд░рд╛рди рдЬреЛ рдкрд╛рдпрд╛ рдЙрд╕рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд╛рд░рд╛рдВрд╢ рдмрдирд╛рдпрд╛ред
pipenv
(рд╡рд┐рд░реЛрдзреА) рдкреИрдЯрд░реНрдирдореИрдВрдиреЗ рдлреЛрдХрд╕ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджрд┐рдпрд╛: рдпрд╣ рди рдХреЗрд╡рд▓ (рд╕рд╛рдорд╛рдиреНрдп) рдкрд╛рдпрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╕рд╕реНрддрд╛ рдерд╛ рдФрд░ рдпрд╣ рдорддрднреЗрджреЛрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдореМрдЬреВрджрд╛ рдЯреВрд▓рд┐рдВрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЛ рдмрд╛рд╣рд░ рд░рдЦрд╛ рд╣реИ рдЬреИрд╕реЗ pipenv
, tox
рдЖрджрд┐ред
pipenv
рдХреНрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреНрдпрд╛ рдирд╣реАрдВ рд╣реИPipfile.lock
рдорд╛рдзреНрдпрдо рд╕реЗ рдареЛрд╕ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред(рдкрд╛рдпрдерди рд╕реЙрдлреНрдЯрд╡реЗрдпрд░) рдЙрддреНрдкрд╛рдж рдпрд╛ рддреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЙрддреНрдкрд╛рдж (рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп) рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ рдпрд╛ рдпрд╣ рдЕрдВрддрд┐рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ "рдЙрджреНрдпрдо рдкреБрд╕реНрддрдХрд╛рд▓рдп" рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╢реНрд░реЗрдгреА рдореЗрдВ рдЖрддреЗ рд╣реИрдВ (рд╕рдорд╛рди рдирд┐рдпрдо рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрднреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЫреЛрдЯреА рд╣реЛрддреА рд╣реИ)ред
pipenv install <package>
рдЗрд╕ рдкреНрд░рдХрд╛рд░ "рдкреИрдХреЗрдЬ рдХреЛ рдЦреЗрд▓рдиреЗ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (рдЖрд╕рдкрд╛рд╕ рдХреЗ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛)"pipenv sync
рдЗрд╕ рдкреНрд░рдХрд╛рд░ "рдареЛрд╕ рдирд┐рд░реНрднрд░рддрд╛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ"рдареЛрд╕ рдирд┐рд░реНрднрд░рддрд╛: рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдкрд┐рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдкреНрд░рдпреБрдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╣реИрд╢ рдХреЗ рд╕рд╛рде
pipenv
рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдБ:Pipfile
: рдЕрдореВрд░реНрдд рдирд┐рд░реНрднрд░рддрд╛
Pipfile.lock
: рдареЛрд╕ (рдмрдВрдж) рдирд┐рд░реНрднрд░рддрд╛"tox
рдпрд╛ рд╕рдорд╛рди рдкрд░реАрдХреНрд╖рдг SW . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВpipenv
рдФрд░ рдареЛрд╕ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдХреЛрдИ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ (рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)Pipfile
Pipfile.lock
pipenv install -e .
рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛Pipfile.lock
рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ (рд╕реАрд▓) рдФрд░ рдореБрджреНрджреЛрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдХреЗ рдмрд╛рдж рдХреЗ рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИредрдореЛрдб: "рд╣рд┐рдо рдпреБрдЧ"
setup.py
install_requires
рднреАрддрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд) pypi рдкрд░ рдкрд░рд┐рд╡рд░реНрддрди рдпрд╛ рдЖрд╢реНрд░рд┐рдд рдкреИрдХреЗрдЬ рдХреЛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ Pipfile.lock
рдХреЛ pipenv install -e .
рджреНрд╡рд╛рд░рд╛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВpipenv sync Pipfile.lock
рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдХреЗ рднреАрддрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИPipfile.lock
рдХреИрд╕реЗ рдФрд░ рдХрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИрдбреЗрд╡рд▓рдкрд░ рджреНрд╡рд╛рд░рд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ (рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ)
рдЖрд╡реЗрджрди: рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж (рдЪрдпрдирд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдореЗрдВ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЪрд▓рд╛рдПрдБ)
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреАрдкреАрдЖрдИ (рдХрдо рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж, рдкреИрдХреЗрдЬ рдХрд┐рд╕реА рднреА рд╕рдордп рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ)
Pipfile.lock
): рдХреБрд▓ рдирд┐рдпрддрддреНрд╡рд╡рд╛рджPipfile.lock
:рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЖрд╡реЗрджрди рддреИрдирд╛рдд рдХрд░реЗрдВ
pbr
рдкреБрд╕реНрддрдХрд╛рд▓рдп requirements.txt
рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдореВрд░реНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред Pipfile
рдкрдврд╝рдиреЗ рдХрд╛ рдЕрдкрдбреЗрдЯ рдЬрд╛рд░реА рд╣реИред
poetry
рдкреИрдХреЗрдЬ pyenv
рд╕рдорд╛рди рдХреБрдЫ рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ
"рд▓реЙрдХрдлрд╛рдЗрд▓ рдХреЛ рд░реЗрдкреЛ рдореЗрдВ рдбреНрд░реЙрдк рдХрд░реЗрдВ" рдФрд░ рдЖрдкрдХреЛ рдирд┐рдпрддрд╛рддреНрдордХ рдмрд┐рд▓реНрдб рдорд┐рд▓рддреЗ рд╣реИрдВ:
Pipfile.lock
рдкрд░рд┐рдгрд╛рдо рджреЗрдиреЗ рдХреА рдЕрдЪреНрдЫреА рдХреНрд╖рдорддрд╛ рд╣реИред рдЧрдВрднреАрд░рддрд╛ рд╕реЗ: flask
рдЗрд╕рдХреЗ 11 рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡реАрдПрд╕ (рдПрдХ рдУрдПрд╕ рдкрд░) 10 рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓реЙрдХ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдкрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдиреЗ рдФрд░ рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреМрди рд╣реИ?Pipfile.lock
(рд▓реЗрдХрд┐рди рд╕реАрдЖрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди) рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рд╕реЗ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдХреЛ рдХрд╣реАрдВ рдФрд░ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЗрдЬрд╛рдЬрдд рдорд┐рд▓рддреА рд╣реИредPipfile.lock
рдкреБрд╕реНрддрдХрд╛рд▓рдп рднрдВрдбрд╛рд░ рдореЗрдВsetup.py
рднреАрддрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреА рдЯреВрдЯреА рд╣реБрдИ рдкрд░рд┐рднрд╛рд╖рд╛ рдЫреБрдкрд╛ рд╕рдХрддрд╛ рд╣реИредPipfile
рдкреБрд╕реНрддрдХрд╛рд▓рдп рднрдВрдбрд╛рд░ рдореЗрдВsetup.py
рднреАрддрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ), рдпрд╣ рдЯреВрдЯреА рд╣реБрдИ setup.py
рдирд┐рд░реНрднрд░рддрд╛ рдШреЛрд╖рдгрд╛ рдХреЛ рдЫреБрдкрд╛ рд╕рдХрддрд╛ рд╣реИредPipfile
рджреНрд╡рд╛рд░рд╛ pipenv install -e .
рдпрд╛ pipenv install -e .[tests]
рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ рдпрджрд┐ рдЖрдкрдХреЛ рдкрд░реАрдХреНрд╖рдг рдирд┐рд░реНрднрд░рддрд╛ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ setup.py
рдореЗрдВ "рдкрд░реАрдХреНрд╖рдг" рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИpipenv install <something>
рдЬреЛрдбрд╝рдирд╛pipenv
рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)редрдкрд╛рдпрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдп (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рд▓реЗ) рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рдЙрдЪреНрдЪ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рд▓рдХреНрд╖реНрдп рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд▓рдЪреАрд▓рд╛рдкрди рд╕рд╛рдмрд┐рдд рд╣реЛрддрд╛ рд╣реИред рдирд┐рдпрддрд╛рддреНрдордХ рдирд┐рд░реНрдорд╛рдг рдкрд░ рд▓рдЪреАрд▓рд╛рдкрди рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИред "рд╕рдВрдХрд▓рди" рджреБрдирд┐рдпрд╛ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдЦрд░рд╛рдм рдПрдВрдЯреАрдкреИрдЯрд░реНрди рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐, рдЕрдзрд┐рдХрд╛рдВрд╢ (рд╕рдВрднрд╡рддрдГ рд╕рднреА) рдкрд╛рдпрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд┐рдпрддрд╛рддреНрдордХ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рдпрджрд┐ рдЖрдк рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ) рдФрд░ рдкрд╛рдпрдерди рдЕрднреА рднреА рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред рдкрд╛рдпрдерди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдЬреАрд╡рд┐рдд рд░рд╣рдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдЬрдЧрд░ рд╕рдВрдХрд▓рд┐рдд рджреБрдирд┐рдпрд╛ рд╕реЗ рдЕрд▓рдЧ рд╣реИред рджреВрд╕рд░рд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдирд┐рдпрддрд┐рд╡рд╛рдж рдХреЛ рдПрдХ рдХрджрдо рдмрд╛рдж рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬреИрд╕реЗ рд╣реА) рдФрд░ рдЖрд╡реЗрджрди (рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕реЗрдЯ рд╕реЗ рдирд┐рд░реНрдорд┐рдд) рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХреЗ рд▓рд┐рдП (рдкреНрд░рд╛рдХреГрддрд┐рдХ рдФрд░ рдЙрдЪрд┐рдд) рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╣рд▓ рдХрд░реЗрдЧрд╛ред
рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд┐рдкрд░реАрдд рд╣реИ рдФрд░ рдпрд╣рд╛рдВ pipenv
рдЬреИрд╕реЗ рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИред
рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ?
рдмрд╣реБрдд рдкреНрд░реЗрд░рдХ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж - рдореБрдЭреЗ рдПрдХ рд╕рдВрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ "рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреЛ рдЧрдпрд╛ рд╣реВрдВ" рддреАрди рдмрд╛рд░ рд░рд┐рдлреИрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ - рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╣рдо рдмреЗрд╣рддрд░ рд╣реЛ рдЧрдПред
@vlcinsky poetry
рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдВрдмрдВрдз рдирд╣реАрдВ рд╣реИ pyenv
ред рдпрд╣ рдмрд╣реБрдд рдХреБрдЫ pipenv
рдЬреИрд╕рд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде, IMO) рд▓реЗрдХрд┐рди рдкреИрдХреЗрдЬрд┐рдВрдЧ рдФрд░ рдкреНрд░рдХрд╛рд╢рди рднрд╛рдЧ рдХреЗ рд╕рд╛рдеред
рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ pyproject.toml
рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬреЛ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рдЙрд╕рдХреА рдирд┐рд░реНрднрд░рддрд╛ (рдЕрдореВрд░реНрдд рдирд┐рд░реНрднрд░рддрд╛) рдФрд░ рдПрдХ pyproject.lock
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИ рдЬреЛ рдкрд┐рди рдХреА рдЧрдИ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг рдФрд░ pyproject.toml
рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдкрд┐рди рдХреА рдЬрд╛рддреА рд╣реИред pipenv
рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдиреЗ рдХреЗрд╡рд▓ рдПрдХ рдирд┐рдпрддрд╛рддреНрдордХ рд▓реЙрдХ рдлрд╝рд╛рдЗрд▓ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИред рдХреЗрд╡рд▓ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╕рдордп, poetry
рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреМрди рд╕реЗ рдкреИрдХреЗрдЬ рдХреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬрд╛рдВрдЪ рдХрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИред
рдФрд░ рдЬрдм рдпрд╣ рдЖрдкрдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкреИрдХреЗрдЬ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдореВрд░реНрдд рдирд┐рд░реНрднрд░рддрд╛рдУрдВ (рдФрд░ рдкрд┐рди рдХрд┐рдП рдЧрдП рдирд╣реАрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ рддрд╛рдХрд┐ рдЖрдк рдЕрдкрдирд╛ рдкреИрдХреЗрдЬ рд╡рд┐рддрд░рд┐рдд рдХрд░рддреЗ рд╕рдордп рд▓рдЪреАрд▓рд╛рдкрди рдмрдирд╛рдП рд░рдЦреЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреАрдИрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)ред
рдЗрд╕рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдореВрд░реНрдд рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЙрдХ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдпрд╣ рджреЛрдиреЛрдВ рджреБрдирд┐рдпрд╛рдУрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред
@zface рдХрд╡рд┐рддрд╛ рдкрд┐рди рдХреА рдЧрдИ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИ, рд╕рдЪрдореБрдЪ рдкреВрд░реЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рд╣рд░рд╛ рд░рд╣реА рд╣реИред рдкрд┐рдкреЗрдирд╡ _idempotent_ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ _reproduction_ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдХреГрдкрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдПрдХ рдордВрдЪ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрдВрдж рдХрд░реЗрдВ рдФрд░ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдХреБрдЫ рдРрд╕рд╛ рдмреЗрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдЬреЛ рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рдХрд╛рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд┐рдкреЗрдирд╡ рдкрд░ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛рдП рдХрд┐ рд▓реЗрдЦрдХ рдХреЛ рдХреНрд▓реА рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред рджрд┐рди рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░реЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЛ рд╕реИрдХрдбрд╝реЛрдВ рд╣рдЬрд╝рд╛рд░реЛрдВ рдорд╢реАрдиреЛрдВ рдореЗрдВ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╡рд╛рддрд╛рд╡рд░рдг рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рд╡рд┐рдХрд╛рд╕ рдФрд░ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХреЗ рдмреАрдЪ рдХреА рд░реЗрдЦрд╛рдУрдВ рдХреЛ рдзреБрдВрдзрд▓рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рднрд╛рдЧ рди рд▓реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЙрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдЖрдЧреЗ рдирд╣реАрдВ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЙрддреНрдкрд╛рджрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╣рдо рд▓рдЪреАрд▓реЗрдкрди рдкрд░ рдмрд╣реБрдд рд╕рдордп рдФрд░ рдкреНрд░рдпрд╛рд╕ рдЦрд░реНрдЪ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЫреЛрдЯреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬреЛ рдмрдбрд╝реЗ рджрд╛рд╡реЗ рдХрд░рддреЗ рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ рдЕрдзрд┐рдХ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд▓реЛрдЧ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдирд╣реАрдВ рдорд╛рд░ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ рдЕрдиреНрдп рдЙрдкрдХрд░рдг рдЖрдкрдХреЛ рд╕рднреА рджреБрдирд┐рдпрд╛ рдХрд╛ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ- рдкрд┐рдкреЗрдирд╡ рд╕реНрд╡рдпрдВ рдирд┐рдХрдЯ рдЕрд╡рдзрд┐ рдореЗрдВ, рдпрджрд┐ рдХрднреА рднреА рдЖрдкрдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИред
@techalchemy рдореИрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмреЗрдЪ рд░рд╣рд╛ рд╣реВрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рдХреЗрд╡рд▓ рдЙрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рдУрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ pipenv
рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдФрд░ poetry
рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ pyproject.lock
рдореЗрдВ рдкрд┐рди рдХрд░рддрд╛ рд╣реИ, рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ pipenv
Pipfile.lock
ред рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ pipenv
рддрд░рд╣ рд╣реА рдкреБрдирд░реБрддреНрдкрд╛рджрди рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд▓реЙрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИ рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкрд┐рди рдХреА рдЧрдИ рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХреА рдЬрд╛рдПрдЧреА рдФрд░ рдпрджрд┐ рдореИрдВ рдЧрд▓рдд рдирд╣реАрдВ рд╣реВрдВ рддреЛ рдпрд╣ рднреА pipenv
рдХрд░рддрд╛ рд╣реИред
рдЕрдореВрд░реНрдд рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕рдордп рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдпрд╣ рд╡рд┐рддрд░рдг рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдкреИрдХреЗрдЬ рдХрд░рддрд╛ рд╣реИ (рдЗрд╕рд▓рд┐рдП рдореВрд▓ рд░реВрдк рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП) рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк рдкрд┐рди рдХреА рдЧрдИ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
@vlcinsky рдЕрднреА рднреА рдХреБрдЫ рдмрд┐рдВрджреБ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рд▓ рдХрд░рдиреЗ, рдареАрдХ рдХрд░рдиреЗ рдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдлреЙрд░реНрдо, рдкрд┐рдкреЗрдирд╡ рдпрд╛ рдЕрдиреНрдпрдерд╛ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрддреНрд╕реБрдХ рд╣реВрдВред рдХреНрдпрд╛ рдЖрдк рдкреБрд▓ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ? рдореБрдЭреЗ рд▓реЗрдЦ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реЛрдЧреАред
рдХрд╡рд┐рддрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрдИ рд╕рд╣реА рдЪреАрдЬреЗрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╢рд╛рдпрдж рдкрд┐рдкреЗрдирд╡ рдбреЙрдХреНрд╕ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреБрдЫ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИ рдкрд┐рдкреЗрдирд╡ рджреЗрд╡ рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдкрдиреА рдУрд░ рдзрдХреЗрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЪрд░реНрдЪрд╛ рдкреАрдкрд╛-рджреЗрд╡ рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреА рд╣реИ, рддрд╛рдХрд┐ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХреА рдкреВрд░реА рддрд╕реНрд╡реАрд░ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛ рд╕рдХреЗред рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣реИред
рдХрд╡рд┐рддрд╛ рднреА рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рдФрд░ рдпреЛрдЧрджрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИред рдпрд╣ рдкрд┐рдкреЗрдирд╡ рд╕рд╣рд┐рдд рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде, рд▓реЛрдЧ рдкрд╣рд▓реЗ рдкрд┐рдкреЗрдирд╡ рд╕рд┐рд░ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреА рдкрд╕рдВрдж рдкрд░ рд╡рдЬрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╢рд┐рдХрд╛рдпрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдЪреНрдЫреА рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рднреА рдирд┐рд░реНрднрд░рддрд╛ рд╕рдорд╛рдзрд╛рди рдХреЗ рдореЛрд░реНрдЪреЗ рдореЗрдВ рддрдХрдиреАрдХреА рд╕реБрдзрд╛рд░реЛрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛ рд╕рдХрддреА рд╣реИ, рдЬреЛ рдХрд┐ рдкрд┐рдкреЗрдирд╡ рдФрд░ рдХрд╡рд┐рддрд╛ рджреЛрдиреЛрдВ рдХрд░рддреЗ рд╣реИрдВ (рдФрд░ рди рд╣реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ)ред рд╣рдо рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВред
@uranusjr рд╣рд╛рдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╡реНрдпрд╛рдкрдХ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИред рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
"рдЬреЛрдбрд╝реА рдкреНрд░рд▓реЗрдЦрди рдкреНрд░рд╛рд░реВрдкрдг" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдордп рдХреЗрд╡рд▓ рджреЛ рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдЫреЛрдЯреЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рд╣реЛрдЧрд╛ред
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЛрдЪрддрд╛ рд╣реИ (рд╕рдВрднрд╡рддрдГ рдПрдХ рдпрд╛ рджреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде):
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рджрдо рдкрд░ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдорди рдХрд░рддреЗ рд╣реИрдВ (рдЬреЛ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░) рдФрд░ рдореБрдЭреЗ рдПрдХ рд╕рдореАрдХреНрд╖рдХ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред
рдЕрдЧрд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рд╕рд╣рдордд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдЖрдкрд╕реЗ рдИ-рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдкрд░реНрдХ рдХрд░реВрдВрдЧрд╛ред
@vlcinsky рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрджрд┐ рдЖрдк рд░реАрдпрд▓рдЯрд╛рдЗрдо рдЗрдВрдЯрд░реИрдХреНрд╢рди рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдореИрдВ PySlackers (рдПрдХ рд╕реНрд▓реИрдХ рд╡рд░реНрдХрд╕реНрдкреЗрд╕) рдкрд░ @uranusjr
рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реВрдВред рдкрд┐рдкреЗрдирд╡ рдХрд╛ рд╡рд╣рд╛рдВ рдПрдХ рдЪреИрдирд▓ рд╣реИ ( #pipenv
)ред
@uranusjr рдкреНрд░рдпрд╛рд╕ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рд╕реЗ рдореЗрд░рд╛ рдпрд╣реА рдорддрд▓рдм рдерд╛ред рдкрд╛рдпрдерди рдХреЛ рдХрд╛рд░реНрдЧреЛ рдЬреИрд╕реЗ рдЕрдЪреНрдЫреЗ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдХреА рд╕рдЦреНрдд рдЬрд░реВрд░рдд рд╣реИред рдЪреАрдЬреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рддрд░реАрдХреЗ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкрд╛рдпрдерди рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдлреАрдХрд╛ рдкрдбрд╝ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ pipenv
рдЗрд╕рд╕реЗ рдХреЛрдИ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреА, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред
рдореБрдЭреЗ рдЬреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ pipenv
рдЦреБрдж рдХреЛ the officially recommended Python packaging tool
рд░реВрдк рдореЗрдВ рд╡рд┐рдЬреНрдЮрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдпрд╣ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдЯреВрд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреНрд░рд╛рдордХ рд╣реИред рдпрд╣ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдореИрдиреЗрдЬрд░ рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрдХ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдЧреЛ, рдПрдирдкреАрдПрдо, рдпрд╛рд░реНрди рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдерд╛ рдЬреЛ рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЬрд┐рдВрдЧ рдЙрдкрдХрд░рдг рд╣реИрдВ рдЬрдмрдХрд┐ рдкрд╛рдЗрдкрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИред
рдФрд░ рдпрд╣рд╛рдБ pipenv
рдХрд╛ рджреЛрд╖ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рдкрд╛рдиреА рдХреЛ рдЧрдВрджрд╛ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд▓реЛрдЧ рдЕрдм рднреА requirements.txt
рдмрдирд╛рдо setup.py
рд╕рд╛рде рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рд╣реА рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░реЗрдВрдЧреЗред рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЕрднреА рднреА рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЙрдирдХреЗ setup.py
рдореЗрдВ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХрд╛рд░реНрдЧреЛ рдЬреИрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдиреЗ рд╕рд╣реА рдХрд┐рдпрд╛: рд╡реЗ рдПрдХ рдирд┐рд░рдВрддрд░рддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕рд╢реАрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ/рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рднреА рдкрд╣рд▓реБрдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ рдЬрдмрдХрд┐ pipenv
рдЬреИрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдХрд░рддреА рд╣реИред
рдФрд░ рдЬрдм рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ:
рдЬреЛ рдкрд┐рдкреЗрдирд╡ рдФрд░ рдХрд╡рд┐рддрд╛ рджреЛрдиреЛрдВ рдХрд░рддреЗ рд╣реИрдВ (рдФрд░ рди рд╣реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ)
рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдореИрдВрдиреЗ рдЬреЛ рджреЗрдЦрд╛ рд╣реИ, рдЙрд╕рдХрд╛ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрдХ pipenv
рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реИред рдХреЗрд╡рд▓ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ PyPI JSON API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдХрднреА-рдХрднреА рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рдХрд╛рд░рдг рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рд╡реИрд╕реЗ рднреА, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдЖрдкрдиреЗ рдХрд╣рд╛, рдХрд┐ рджреЛрдиреЛрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╕реАрдЦ рд╕рдХрддреА рд╣реИрдВред
рдФрд░, рдПрдХ рдФрд░ рдмрд╛рдд, рдкрд┐рдкреЗрдирд╡ рдХрд╛ рднрд╡рд┐рд╖реНрдп рдХреНрдпрд╛ рд╣реИ, рдЕрдЧрд░, рдЕрдВрддрддрдГ, рдкрд╛рдЗрдк Pipfile
рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд╕рд┐рд░реНрдл рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдореИрдиреЗрдЬрд░ рд╣реЛрдЧрд╛?
рдпрджрд┐ рдХрд╡рд┐рддрд╛ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрдХ рдЬреЗрд╕рди рдПрдкреАрдЖрдИ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ 'рдЦрд░рд╛рдм рдкреНрд░рдХрд╛рд╢рд┐рдд рдкреИрдХреЗрдЬ' рдХреЗ рдХрд╛рд░рдг рдХрднреА-рдХрднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕реАрдорд┐рдд рд╣реЛрдЧрд╛ред рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдЬреЗрд╕рди рдПрдкреАрдЖрдИ _рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛_ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЖрдк рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдирд┐рдкрдЯ рд░рд╣реЗ рд╣реЛрдВ, рдФрд░ рдРрд╕рд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рд╡рд╣ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рд╣рдо рдЬреЗрд╕рди рдПрдкреАрдЖрдИ рдХреЛ рднреА рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рдереЗ, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддреЗрдЬрд╝ рдерд╛, рд▓реЗрдХрд┐рди рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдЯреАрдо рдиреЗ рд╣рдореЗрдВ рдЗрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред рдХреБрдЫ рд▓рдЪреАрд▓рд╛ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрд╕рдВрдЧрдд рд▓рдЧрддрд╛ рд╣реИ рдЕрдЧрд░ рдпрд╣ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕реНрд░реЛрдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рдЖрдЦрд┐рд░рдХрд╛рд░ рдЪреБрдиреМрддрд┐рдпрд╛рдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдЧреНрд░рд╛рдл рдмрдирд╛рдиреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╣реИрдВ рдЬреЛ рдПрдХ рд╕реЗрдЯрдЕрдк рдлрд╝рд╛рдЗрд▓ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдкреИрдХреЗрдЬрд┐рдВрдЧ рдЗрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдмрд╕ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдЧреНрд░рд╛рдлрд╝ рдЬреЛ рдореЗрд░реА рдорд╢реАрди рдкрд░ рд╣рд▓ рд╣реЛрддрд╛ рд╣реИ, рдЙрд╕реА рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рднреА рдЖрдкрдХреА рдорд╢реАрди рдкрд░ рд╣рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рд╕реЗ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд▓рд╣рд░реЛрдВ рдХреЛ рд╣рд╛рде рд▓рдЧрд╛рдирд╛ рдФрд░ рдХрд╣рдирд╛ рдЖрд╕рд╛рди рд╣реИ 'рдЕрдЧрд░ рдкрд╛рдЗрдк рдПрдХ рдкрд╛рдЗрдкрдлрд╛рдЗрд▓ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рдпрд╣ рд╕рд┐рд░реНрдл рдкрд┐рдкреЗрдирд╡ рдХреЛ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдореИрдиреЗрдЬрд░ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ?' рдирд╣реАрдВ, рдкрд┐рдкреЗрдирд╡ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрдХ рд╣реИред рдпрд╣ рдмреЗрдХрд╛рд░ рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд▓реЙрдХрдлрд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рддреБрдЪреНрдЫ рдкреНрд░рддреАрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЗрд╕реЗ рджреВрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдЯреВрд▓ рдХреЛ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдореИрдиреЗрдЬрд░ рдореЗрдВ рдХрдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рд╣рдо рд▓реЙрдХрдлрд╛рдЗрд▓реНрд╕ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд╛рдЗрдерди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдХрд░ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИрдВ, рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдЙрдкрд▓рдмреНрдз рд░рдЦрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдк рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдФрд░ рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рддреИрдирд╛рдд рдФрд░ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХреЗрдВред рд╣рдо рд╕реНрдерд╛рдиреАрдп рдкрд╣рд┐рдпреЛрдВ рдФрд░ рдлрд╛рдЗрд▓реЛрдВ, рд╡реАрд╕реАрдПрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА (рд╣рдо рд╡рд╣рд╛рдВ рднреА рдЧреНрд░рд╛рдл рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ) рд░рд┐рдореЛрдЯ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯреНрд╕, рдкреАрдкреАрдЖрдИ рдкреИрдХреЗрдЬ, рдирд┐рдЬреА рдЗрдВрдбреЗрдХреНрд╕ рдЗрддреНрдпрд╛рджрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рд╕рд╣рд┐рдд рдХрдИ рд╕рдВрдХрд▓реНрдк рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рджрд┐рди рдХреЗ рдЕрдВрдд рдореЗрдВ pip _will_ рд╣реИрдВрдбрд▓ pipfiles, рдпрд╣реА рдпреЛрдЬрдирд╛ рд╣реИ, рдкреНрд░рд╛рд░реВрдк рдмрдирдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдпрд╣ рдпреЛрдЬрдирд╛ рд░рд╣реА рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрдЫрдиреЗ рдЬреИрд╕рд╛ рд╣реА рд╣реИ 'рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЬрдм рдкрд╛рдЗрдк рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ?' рдкреНрд░рд╢реНрди рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд╣реИред рдкрд┐рдк рдЙрд╕ рдкреНрд░рд╛рд░реВрдк рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣рдо рдлрд╛рдЗрд▓реЗрдВ рднреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдкреАрдЖрдИрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╡реИрд╕реЗ)ред
@techalchemy
рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдЬреЗрд╕рди рдПрдкреАрдЖрдИ рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рдирд┐рд░реНрднрд░рддрд╛ рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИ рднрд▓реЗ рд╣реА рдЖрдк рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдирд┐рдкрдЯ рд░рд╣реЗ рд╣реЛрдВ, рдФрд░ рдРрд╕рд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рд╡рд╣ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ
рдпрд╣ рд╕рд┐рд░реНрдл рд╕рд╛рджрд╛ рдЧрд▓рдд рд╣реИ, рдЖрдк https://pypi.org/pypi/{project}/{release}/json
рдХреЙрд▓ рдХрд░рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ https://pypi.org/pypi/{project}/json
рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рд╣реА рдорд┐рд▓реЗрдВрдЧреА, рд▓реЗрдХрд┐рди рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд╕рд╣реА рд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдФрд░ рдЕрдЬрдЧрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдкреИрдХреЗрдЬрд┐рдВрдЧ/рдкреНрд░рдХрд╛рд╢рди рднрд╛рдЧ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрдд рдореЗрдВ рдпрд╣ рд╕рднреА рдХреЛ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ JSON API рдХрд╛ рдордЬрд╝рдмреВрддреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджреЗрдЧрд╛ред
рдпрд╣ рдмреЗрдХрд╛рд░ рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд▓реЙрдХрдлрд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
рд╣рдо рд▓реЙрдХрдлрд╛рдЗрд▓реНрд╕ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд╛рдЗрдерди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдХрд░ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИрдВ, рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдЙрдкрд▓рдмреНрдз рд░рдЦрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдк рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдФрд░ рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рддреИрдирд╛рдд рдФрд░ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХреЗрдВред
рдФрд░ рдРрд╕рд╛ рд╣реА рдХрд░рддрд╛ рд╣реИ poetry
ред рдФрд░ рдЖрдк рдЗрд╕реЗ pipenv
(рдкрд╛рдЗрдк-рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЗ рд╕рдорд╛рди рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП JSON API рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджреЗрдЦреЗрдВ https://github.com/sdispater/poetry/issues/37#issuecomment -379071989 рдФрд░ рдпрд╣ рдЕрднреА рднреА pipenv
рд╕реЗ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реЛрдЧрд╛ (https://github.com/sdispater/poetry#dependency-resolution )
@zface рдореИрдВ рдЗрд╕реЗ рдЕрдВрддрд┐рдо рдмрд╛рд░ рдХрд╣реВрдВрдЧрд╛, рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд▓реЗ рдЬрд╛рдПрдВред рдкрд┐рдкреЗрдирд╡ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдкрд╛рдпрдерди рдкреИрдХреЗрдЬрд┐рдВрдЧ рдЯреВрд▓ рд╣реЛрдиреЗ рдХрд╛ рд╕реНрд╡-рдШреЛрд╖рдгрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ; рдпрд╣ рдХрд╣рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣реИ ред рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдиреБрдЪрд┐рдд рд╣реИ, рддреЛ рдкрд┐рдкреЗрдирд╡ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдзрд┐рдХрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдмрддрд╛рдПрдВ ред рдХреГрдкрдпрд╛ рдЗрди рдмрд╛рддреЛрдВ рдХреЛ рдкрд┐рдкреЗрдирд╡ рджреЗрд╡ рдкрд░ рди рдбрд╛рд▓реЗрдВред рд╢рд┐рдХрд╛рдпрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЧрд▓рдд рдЬрдЧрд╣ рд╣реИ, рдФрд░ рдЖрдк рдпрд╣рд╛рдВ рдЕрдкрдиреА рд╢рд┐рдХрд╛рдпрддреЛрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЖрдк рдЕрдкрдиреЗ рдкрд╛рд╕ рдореМрдЬреВрдж рддрдХрдиреАрдХреА рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдмреЗрд╣рддрд░ рдЙрддреНрддрд░ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдкрд┐рдкреЗрдирд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрджреНрджрд╛ рдЯреНрд░реИрдХрд░ рд╣реИ, рди рдХрд┐ рдкрд╛рдпрдерди рдкреИрдХреЗрдЬрд┐рдВрдЧ рдЯреВрд▓реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд░реНрдЪрд╛ рдмреЛрд░реНрдб рдФрд░ рдкрд╛рдпрдерди рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред
рдкрд┐рдкреЗрдирд╡ рдХреЗрд╡рд▓ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдкрд┐рдк-рдЯреВрд▓реНрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реИ, рдХреГрдкрдпрд╛ рд╣рдорд╛рд░реЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЛ рдПрдХ рд▓рд╛рдЗрдирд░реНрд╕ рдореЗрдВ рдХрдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░реЗрдВ рдЬреЛ рд╕рдордЭ рдХреА рдХрдореА рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдкреАрдкреАрдкреАрдЖрдИ рдПрдкреАрдЖрдИ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЯреАрдо рд╕реЗ рд╕реАрдзреЗ рдмрд╛рдд рдХреАред
рдпрд╣ рд╕рд┐рд░реНрдл рд╕рд╛рджрд╛ рдЧрд▓рдд рд╣реИ,
рдЗрд╕ рддрд░рд╣ рдХреЗ рд░рд╡реИрдпреЗ рдХрд╛ рдпрд╣рд╛рдВ рд╕реНрд╡рд╛рдЧрдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рдордд рд╕рдордЭреЛ рдХрд┐ рд╣рдо рд╕рдордЭ рдирд╣реАрдВ рдкрд╛ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдХреГрдкрдпрд╛ рд╢рд┐рд╖реНрдЯрд╛рдЪрд╛рд░ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВред
рдпрд╣ рдЕрднреА рднреА рдкрд┐рдкреЗрдирд╡ рд╕реЗ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реЛрдЧрд╛ (https://github.com/sdispater/poetry#dependency-resolution)
рдкрд┐рдкреЗрдирд╡ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдЧреНрд░рд╛рдл рдХреЛ рд╕рдорддрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореБрджреНрджреЗ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реБрдП рдЬрд╣рд╛рдВ рдПрдХ рдкреЗрдбрд╝ рдХреЛ рдЪрдкрдЯрд╛ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкреВрд░реЗ рдЙрдкрдХрд░рдг рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рдФрд░ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рджреЛрдиреЛрдВ рд╣реИ, рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд╣реИ, рдЖрдк рдмрд╛рд░-рдмрд╛рд░ рд╕рд╛рдмрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рдкрд┐рдкреЗрдирд╡ рдХрд╛ рдЕрдкрдорд╛рди рдХрд░рдиреЗ рдФрд░ рдХрд╡рд┐рддрд╛ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВред рдХреГрдкрдпрд╛ рдЕрдкрдиреЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рд░рд╣реЗрдВ, рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдирд╣реАрдВ рд╣реИред
рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЪрд░реНрдЪрд╛ рд╡рд┐рд╖рдп рд╕реЗ рдкрд░реЗ рд╣реИ, рдЬреЛ рдкрд┐рдкреЗрдирд╡ рдХреЗ рдЖрд╕рдкрд╛рд╕ "рдЕрдЪреНрдЫреЗ рдкреНрд░рдерд╛рдУрдВ" рдХреЛ рднреБрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реА рдереАред
рддрдерд╛рдкрд┐,
[...] рдЕрднреА рднреА рд╡рд╣реА рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░реЗрдЧрд╛ рдЬреЛ рдкрд╣рд▓реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ.txt рдмрдирд╛рдо setup.py рдХреЗ рд╕рд╛рде рдХреА рдЧрдИ рдереАрдВред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ рдЙрдирдХреЗ setup.py рдореЗрдВ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЕрднреА рднреА рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдореИрдВ рдЗрд╕ рд░рд╛рдп рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдирдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкрд╛рдпрдерди рдХреЛрдб рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреИрдХреЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрдЯрд┐рд▓ рд╣реИ, рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдСрдирд▓рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдкреЗрдирд╡ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреИрдХреЗрдЬ рдирд┐рд░реНрднрд░рддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реИред рд╣рдо рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рджреЛрдмрд╛рд░рд╛ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХреЗред рд╣рдореЗрдВ, рдПрдХ рд╕рдореБрджрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ, рдЪрд░рдг-рджрд░-рдЪрд░рдг, рдЕрдЬрдЧрд░ рдЙрдкрдХрд░рдг рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдЖрдзреБрдирд┐рдХ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдФрд░ рдкрд┐рдкреЗрдирд╡ (рдФрд░ рд╢рд╛рдпрдж рдХрд╡рд┐рддрд╛) рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрджрдо рд╣реИред
рдПрдХ рддрд░рдл рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП Pipfile
рдФрд░ рджреВрд╕рд░реА рддрд░рдл рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП setup.py
рдмрдирд╛рдП рд░рдЦрдирд╛, рдХреЛрдИ рджрд┐рдорд╛рдЧ рдирд╣реАрдВ рд╣реИред рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд╣рдо рдХрд┐рддрдиреЗ рд╢рдмреНрджреЛрдВ рдФрд░ рд▓рдВрдмреЗ рд▓реЗрдЦреЛрдВ рдФрд░ рдЕрдЪреНрдЫреЗ рдЕрднреНрдпрд╛рд╕ рдЧрд╛рдЗрдбреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдордЭрд╛рддреЗ рд╣реИрдВ, рдпрд╣ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИред рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдпрд╣ рдЗрд╕ рд╕рдордп рдРрд╕рд╛ рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдмреЗрд╣рддрд░ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдВрдд рдореЗрдВ, рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореБрдЭреЗ рдПрдХ рдЙрдкрдХрд░рдг рдЪрд╛рд╣рд┐рдП, рд╢рд╛рдпрдж рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде, рдореЗрд░реА рдорджрдж рдХрд░рдиреЗ рдФрд░ рдореЗрд░реЗ рдЬреАрд╡рди рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
рдЙрдирдХрд╛ рд╕рд┐рд░реНрдл рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХрд░рддрд╛ рд╣реИ рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП requirements.txt/Pipfile
рдРрд╕реЗ PBR рд░реВрдк libs рд╕реЗ 'рдЖрд╕рд╛рди setup.py', рдПрдХ Pipfile рдЕрд╡рдЧрдд рдЖрд╡рд░рдг arround рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рдиреЗ рдХреЗ install_requires
рдХреЗ рдмрд┐рдирд╛, рд╕рднреА рдЕрд╡рд╛рдВрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ pbr рд▓рд╛рддрд╛ рд╣реИ, рдФрд░ рдкреИрдХреЗрдЬ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рдорд░реНрдкрд┐рдд setuptools рдЖрд╡рд░рдг рдореЗрдВ рдЬреЛ рдХреЗрд╡рд▓ рд╡рд╣реА рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рджреБрдирд┐рдпрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ:
Pipfile
рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП (рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рджреЛрдиреЛрдВ рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдгрд┐рдд)Pipfile.lock
рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП (рдХреЗрд╡рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдг)pipfile_setuptools
, install_requires_pipfile
?) рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░рдердо рд╕реНрддрд░ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛ рдХрд╛рдо рдХреЗрд╡рд▓ рдЗрдВрдЬреЗрдХреНрд╖рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ Pipfile
рдореЗрдВ install_requires
редрдпрд╣ рдПрдХ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдЬреЛ pipenv
рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп Pipfile
рдкрд╛рд░реНрд╕рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?
рдореЗрд░реА рд╕рдордЭ Pypa рд╕реЗ @gsemet рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдХрд┐ pyproject.toml рд╕рд╛рде рдмрдЬрд╛рдп, рдХреЗ рдиреЗрддреГрддреНрд╡ рдореЗрдВ рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЙрдбрд╝ рдЬрд╛рдирд╛ ред рдкрд┐рдкрдлрд╛рдЗрд▓ рдХреЛ рд╕реНрд░реЛрдд рдкреНрд░рд╛рд░реВрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рдЙрдирд╕реЗ (рдкрд╛рдЗрдкрд╛-рджреЗрд╡ рдпрд╛ рдбрд┐рд╕реНрдЯреБрдЯрд┐рд▓реНрд╕-рд╕рд┐рдЧ рдкрд░) рдмрд╛рдд рдХрд░рдиреА рд╣реЛрдЧреАред Pipfile (рдФрд░ рд▓реЙрдХ рдлрд╝рд╛рдЗрд▓) рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕реЗ pypa/pipfile (рдЬреЛ Pipenv рд╡рд┐рдХреНрд░реЗрддрд╛рдУрдВ рдХреЛ рдХреЛрд░ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд▓реЙрдЬрд┐рдХ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдореЗрдВ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдпрджрд┐ рдЖрдк рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдПрдХ рд╕рдВрджреЗрд╢ рдЫреЛрдбрд╝ рджреЗрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ рдХрд┐ рд╣рдо рдкрд╛рдпрдерди рдкреИрдХреЗрдЬрд┐рдВрдЧ рд╡рд┐рддрд░рдг рдХреЗ рджреЛ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдХреИрд╕реЗ рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВ pyproject.toml
рдореЗрдВ рдШреЛрд╖рд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рджреЗрдЦрдХрд░ рдереЛрдбрд╝рд╛ рджреБрдЦреА рд╣реВрдВ (рдЬреЛ рдкреАрдмреАрдЖрд░ рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ setup.cfg
рд░реВрдк рдореЗрдВ рднреВрдорд┐рдХрд╛рдПрдВ рд▓реЗрддрд╛ рд╣реИ), рдЬрдмрдХрд┐ рдкреАрдкреАрдП Pipfile
рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ ....
рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдлрд╝реНрд▓рд┐рдЯ рдХрд░рдиреЗ рдФрд░ рдкрд╛рдЗрдкрдлрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╡рд╣рд╛рдБ рднреА Kennethreitz рдХреА рд╣реИ pipenvlib рдХрд┐ рд╣рд▓реНрдХрд╛ рд▓рдЧрддрд╛ рд╣реИред
PBR рдХрд╛ setup.cfg рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИ (рдЙрджрд╛: data_files
) рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╕рд╛рдЭрд╛ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХрдИ рдЯреВрд▓ (flake8, pytest, ...) рдПрдХ рдЕрдЬрдЧрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрдбрд╝ рдореЗрдВ рдлрд╝рд╛рдЗрд▓)
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@ Moritz90 рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЛ рдЖрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдХреА рдХрдИ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪрд┐рдпрд╛рдБ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рд╣реЛрдВрдЧреАред
рдкрд╛рдЗрдкрд╛-рджреЗрд╡ рдкрд╛рдпрдерди рдкреИрдХреЗрдЬрд┐рдВрдЧ рдФрд░ рдЙрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рдЪрд░реНрдЪрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд╣реИред рдЕрдЧрд░ рдореИрдВ рдЗрд╕реА рддрд░рд╣ рдХреА рдЪрд░реНрдЪрд╛ рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рддреЛ рд╢рд╛рдпрдж рдореИрдВ рдпрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рддрд╛ред
рдкрд╛рдпрдерди-рд╡рд┐рдЪрд╛рд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдЧрд╣ рд╣реИ, рдФрд░ рдкреВрд░реЗ рдкрд╛рдпрдерди рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЙрдЪреНрдЪ рджреГрд╢реНрдпрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рднреА рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдкреАрдИрдкреА рд╕реНрддрд░ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЕрдВрддрддрдГ рдЖрдк рдРрд╕рд╛ рдХрд░реЗрдВрдЧреЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ)ред