рдПрдХ рд╕рдлрд▓ рдкрд╛рдпрдерди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП 10 рдХрджрдо

рд╕рд╛рдордЧреНрд░реА, рдЬрд┐рд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдЖрдЬ рд╣рдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЙрди рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИ рдЬреЛ рдХреЛрдб рд╕реНрд╡рд░реВрдкрдг, рдкрд░реАрдХреНрд╖рдг, рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде рдкрд╛рдпрдерди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд▓реИрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛, рдПрдХрд░реВрдкрддрд╛ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдкрд╛рдардХ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╛рдпрдерди рд╡рд┐рдХрд╛рд╕ рдФрд░ рдкрд╛рдпрдерди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреБрдЫ рдЕрдиреБрднрд╡ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╡рд╣ рдкрдврд╝рдиреЗ рдХреЗ рджреМрд░рд╛рди рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕реА рдХреЛрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдЖрдк рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдорд╛рд╣реМрд▓ рдХреИрд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдкрд╛рдпрдерди рдкреИрдХреЗрдЬ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг macOS рдФрд░ рдкрд╛рдпрдерди 3.7 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред



рдЪрд░рдг 1. рдХрд╛рд▓реЗ рд░рдВрдЧ рдХреА рд╕реНрдерд╛рдкрдирд╛



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

рдореИрдВ, рдПрдХ рдХреЛрдб рд╕рдВрдкрд╛рджрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдЯрдо рдореЗрдВ Python-Black рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝рд╛ред рдЖрдк рдпрд╣ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдЯрдо рдлрд╛рдЗрд▓ рдХреЛ рд╕реЗрд╡ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреЛрдб рдХреЛ рд░рд┐рдлреЙрд░реНрдо рдХрд░реЗрдЧрд╛ред

рдЬрдмрдХрд┐ рд╣рдо рдмреНрд▓реИрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдЖрдЗрдП рдЗрд╕ рдЯреВрд▓ рдХреЛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рд╣реМрд▓ рд╕реЗ рд▓реИрд╕ рдХрд░реЗрдВ рдЬреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рд╣рдорд╛рд░реЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдирддреАрдЬрддрди, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд▓реЛрдЧ рд╕рдорд╛рди рдХреЛрдб рдкреНрд░рд╛рд░реВрдкрдг рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЕрдиреНрдпрдерд╛ рдЙрдирдХреЗ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред

рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ_ black==18.9b0 рдлрд╝рд╛рдЗрд▓ рдХреА рдкрд╣рд▓реА рдорд┐рд▓реА рдлреНрд░реА рд▓рд╛рдЗрди рдореЗрдВ black==18.9b0 рдЬреЛрдбрд╝реЗрдВ рдФрд░ install -r requirements_dev.txt black==18.9b0 рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБред

рдХрд╛рд▓рд╛, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХреЛрдб рдХреА рд▓рдВрдмрд╛рдИ 88 рд╡рд░реНрдгреЛрдВ рддрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдХреБрдЫ рд╢реИрд▓реА рдЧрд╛рдЗрдб, рдЬреИрд╕реЗ рдХрд┐ рд╕реНрдлрд┐рдВрдХреНрд╕ , рдХреЛ 79 рд╡рд░реНрдгреЛрдВ рдХреА рдПрдХ рд▓рдВрдмреА рд▓рдВрдмрд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред Black-Atom рдкреИрдХреЗрдЬ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ, рдЖрдк рд╡рд╛рдВрдЫрд┐рдд рд▓рд╛рдЗрди рдХреА рд▓рдВрдмрд╛рдИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдм рдЬрдм рд╣рдореЗрдВ рдПрдХ рдЯреВрд▓ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдХреЛрдб рдлреЙрд░реНрдореЗрдЯрд┐рдВрдЧ рдкрд░ рд╕рдордп рдмрдЪрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛, рддреЛ рд╣рдо рдпрд╣ рд╕реЛрдЪреЗрдВрдЧреЗ рдХрд┐ рдХреИрд╕реЗ рддреЗрдЬреА рд╕реЗ рдФрд░ PyPI рдХреЛ рдХреЛрдб рднреЗрдЬрдиреЗ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред

рдЪрд░рдг 2. .pypirc File рдмрдирд╛рдирд╛


рдЬрдм TestPyPI рдФрд░ PyPI рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрд╕реЗрдВрдмрд▓реА рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрддрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓реЙрдЧрд┐рди рдЬрд╛рдирдХрд╛рд░реА рджрд░реНрдЬ рдХрд░рдиреА рд╣реЛрдЧреАред рдпрджрд┐ рдЖрдк рд╕реБрддрд▓реА рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдЕрдм рд╣рдо рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░реЗрдВрдЧреЗред

рд╕реБрддрд▓реА .pypirc рдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреА рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рд╣реЛрдо рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЙрдкрдХрд░рдг, рдбреЗрдЯрд╛ рдХреЛ рдЕрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдПрдХ URL, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рд▓реЗрддрд╛ рд╣реИред

рддреЛ, рдЕрдкрдиреЗ рдШрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ .pypirc рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:

 touch ~/.pypirc 

рдЗрд╕рдореЗрдВ рдирд┐рдореНрди рдкрд╛рда рдЬреЛрдбрд╝реЗрдВ:

 [distutils] index-servers =   pypi   testpypi [testpypi] repository: https://test.pypi.org/legacy username = your_username password = your_pypitest_password [pypi] username = your_username password = your_pypi_password 

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рднреА рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рд╣реЛрдо рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╕реЗрд╡ рдХреА рдЧрдИ рд╣реИ, рди рдХрд┐ рдореМрдЬреВрджрд╛ рд╡рд░реНрдХрд┐рдВрдЧ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВред рдпрджрд┐ рдЖрдк рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 chmod 600 ~/.pypirc 

рдЕрдм рдЖрдкрдХреЗ рдкреИрдХреЗрдЬ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ TestPyPI рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 twine upload -r testpypi dist/* 

рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ PyPI рдореЗрдВ, рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреИрдХреЗрдЬ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 twine upload dist/* 

.pypirc рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЕрдм рдЕрдкрдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рджрд░реНрдЬ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЕрдм рд╣рдо рдЕрдкрдиреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЙрдкрдХрд░рдг рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдЙрд╕ рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╣реА рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬреЛ рд╣рдо рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред

рдЪрд░рдг 3. рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ pytest рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ



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

requirements_dev.txt рд▓рд┐рдП рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝реЗрдВ_dev.txt:

 pytest==4.3.0 

рдЖрдЗрдП рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

 pip install requirements_dev.txt 

рдЕрдм рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рдкреИрдХреЗрдЬ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛:

 pip install -e . 

рдпрджрд┐ рдЖрдкрдиреЗ рдЕрдкрдиреЗ рд╡рд░реНрдЪреБрдЕрд▓ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдкрд░рд┐рд╡реЗрд╢ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рджреЛрдиреЛрдВ pip рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдЪрд░рдг 4. рдЯреЗрд╕реНрдЯ рдмрдирд╛рдирд╛


test рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдореВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдЗрд╕рдореЗрдВ рдлрд╝рд╛рдЗрд▓ test_your_package_name.py рд░рдЦреЗрдВред рдореЗрд░реА рдлрд╝рд╛рдЗрд▓ рдХреЛ test_notebookc.py рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо test_ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ pytest рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдРрд╕реА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░реАрдХреНрд╖рдг рдХреЛ test_notebookc.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ test_notebookc.py рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдпрд╣ test_notebookc.py рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рд╕рд╣реА рдирд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЗрд╕рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдЖрдкрдХрд╛ рдорд┐рд▓рд╛рди рдХрд░реЗрдВ, рдЗрд╕рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВред

 """Tests for `notebookc` package.""" import pytest from notebookc import notebookc def test_convert(capsys):   """Correct my_name argument prints"""   notebookc.convert("Jill")   captured = capsys.readouterr()   assert "Jall" in captured.out 

рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ?

рдкрд╣рд▓реЗ рд╣рдо рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдпрд╣рд╛рдВ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдЯреЗрдореНрдкреНрд▓реЗрдЯ test_my_function_name рдЕрдиреБрд╕рд╛рд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рди рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЛ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╕рдордЭ рд╕рдХреЗ рдХрд┐ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдПрдХ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреА рдХрд╡рд░реЗрдЬ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред

рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдлрд╝рдВрдХреНрд╢рди ( convert ) рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ Jill рдирд╛рдо рджреЗрддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛ - рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЙрд╕реЗ рдХреИрдкреНрдЪрд░ рдХрд░реЗрдВред рдпрд╣рд╛рдВ рдпрд╣ рдХрд╣рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдкреНрд░рд╢реНрди рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдЕрддреНрдпрдВрдд рд╕рд░рд▓ рд╣реИред рд╡рд╣ my_name рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ:

 print(f"I'll convert a notebook for you some day, {my_name}.") 

рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрд╕реНрдЯреЗрд╕реНрдЯ рдЪреЗрдХ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ Jall рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрд╣ рд░реЗрдЦрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо Jill рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдкрд░ рдкрд╛рдЗрдЯреЗрд╕реНрдЯ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд┐рдВрдЧ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдХрдорд╛рдВрдб рдкреНрд░реЙрдореНрдкреНрдЯ рдкрд░ pytest рд▓рд┐рдЦрдХрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдБред рдпрд╣ рдкрд░реАрдХреНрд╖рд╛ рдЕрд╕рдлрд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рддреНрд░реБрдЯрд┐ рдЬрд╛рдирдХрд╛рд░реА рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреА рд╣реИред


рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ рдерд╛ред

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

рд╣рдордиреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛, Jill рдмрдпрд╛рди рдХреЛ Jill рдмрджрд▓ Jall рдФрд░ рдлрд┐рд░ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВред рдЕрдм рдЗрд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рдлрд▓ рд╕рдорд╛рдкрдиред

рдЕрдм рд╕рдм рдареАрдХ рд╣реИред рдкрд░реАрдХреНрд╖рдг рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдХреЛрдИ рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкрдВрдХреНрддрд┐ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд░реЗрдЦрд╛ рдЙрд╕ рдкрд╛рда рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рдПрдЧреА рдЬрд┐рд╕реЗ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

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

рдЬрдм рд╣рдордиреЗ рдкрд┐рдЫрд▓рд╛ рдкрд░реАрдХреНрд╖рдг рдмрдирд╛рдпрд╛ рдерд╛, рддреЛ рд╣рдордиреЗ рдХреЛрдб рд▓рд┐рдЦрд╛ рдерд╛ рдЬреЛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рдлрд▓ рд╕рдорд╛рдкрди рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ Test-Driven Development (TDD) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЯреАрдбреАрдбреА рдПрдХ рд╕рд┐рджреНрдз рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЯреАрдбреАрдбреА рдХреЗ рдмрд┐рдирд╛ рдХрдо рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВред рдпрд╣рд╛рдБ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдЯреАрдбреАрдбреА рд╕рд╛рдордЧреНрд░реА рд╣реИред

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

рдкреИрдХреЗрдЬ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред

рдЪрд░рдг 5. рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рд╕реЗрд╡рд╛ рдФрд░ рдЙрд╕рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг



рдЯреНрд░реИрд╡рд┐рд╕ CI рдПрдХ "рд╡рд┐рддрд░рд┐рдд рд╡реЗрдм рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдФрд░ рдирд┐рд░реНрдорд╛рдг рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рд╣реИред" рдЗрд╕реЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрдбреЗрд░рд╛ рдиреЗ рдЦрд░реАрджрд╛ рдерд╛ред рдЕрдиреНрдп рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдкреНрд░рдгрд╛рд▓рд┐рдпрд╛рдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп, рдЦреБрд▓рд╛-рд╕реНрд░реЛрдд рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдЙрдкрдХрд░рдг рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдЖрдкрдХреЛ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреЗрд╡рд▓ рдЙрд╕ рдХреЛрдб рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдорд╛рдирдХреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдЖрдк рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

Https://travis-ci.org/ рдкрд░ рдПрдХ рдЦрд╛рддрд╛ рдмрдирд╛рдПрдБред рдЗрд╕рдХреЗ рдмрд╛рдж, рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ Review and add your authorized organizations рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкреГрд╖реНрда рдкрд░ Review and add your authorized organizations рдХреЛ Review and add your authorized organizations ред рдЖрдкрдХреЛ GitHub рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред Organization access рдЕрдиреБрднрд╛рдЧ рдореЗрдВ Grant рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред


рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдЦрд╛рддрд╛ рд╕реЗрдЯ рдХрд░реЗрдВ

рдореБрдЭреЗ рдиреЛрдЯрдмреБрдХрдЯреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдЦрд╛рддреЗ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП notebookc рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рдЦрд╛рддреЗ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░, рдЯреНрд░реИрд╡рд┐рд╕ CI рдХреЛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ рдПрдХ рдорд┐рдирдЯ рдХрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдирд┐рдореНрди рдЖрдХреГрддрд┐ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднрдВрдбрд╛рд░ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рд╕рдХреНрд░рд┐рдпрдг

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


рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрд┐рд▓реНрдб рд╕реЗрдЯрдЕрдк

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

рдЪрд░рдг 6. .travis.yml рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛


рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ .travis.yml рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:

 dist: xenial language: python python: 3.7.2 install: - pip install -r requirements_dev.txt - pip install -e . script: - pytest 

dist: xenial рдЯреНрд░реИрд╡рд┐рд╕ рдХреЛ рдЙрдмреБрдиреНрдЯреВ рдХреНрдирд┐рдЕрд▓ 16.04 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП dist: xenial рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрд╛рдпрдерди 3.7 рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Ubuntu Xenial рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

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

рдЪрд░рдг 7. рдЯреНрд░реЗрд╡рд┐рд╕ рд╕реАрдЖрдИ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг


рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ, рдЙрдиреНрд╣реЗрдВ GitHub рдореЗрдВ рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВ, PR рдХрд░реЗрдВред рдЯреНрд░реИрд╡рд┐рд╕ рдХреЛ рд╕реЗрдХрдВрдб рдХреЗ рднреАрддрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред


рдХрд╛рдо рдкрд░ рдЯреНрд░реИрд╡рд┐рд╕

рдЯреНрд░реИрд╡рд┐рд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рдпрд╣реА рдХрд░рддрд╛ рд╣реИред


рдЯреНрд░реИрд╡рд┐рд╕ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп

рдпрджрд┐ рдкреАрдЖрд░ рдЕрд╕рдлрд▓ рд░рд╣рд╛ - рдЯреНрд░реИрд╡рд┐рд╕ рдЗрд╕рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдЧрд╛ред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдЕрд╕рдлрд▓ рд╣реИ, рддреЛ рдЖрдк рдЙрд╕реА рд╢рд╛рдЦрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред

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

рдпрджрд┐ рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЧрдпрд╛, рдпрджрд┐ рдкреГрд╖реНрда рдореЗрдВ рд╣рд░реЗ рд▓реЗрдмрд▓ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕рддреНрдпрд╛рдкрди рдФрд░ рд╕рдВрдпреЛрдЬрди рд╕рдлрд▓ рд░рд╣реЗред


рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЕрд╕реЗрдВрдмрд▓реА рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрдкрдиреНрди рд╣реБрдИ

рдпрджрд┐ рдкреГрд╖реНрда рдкрд░ рд╣рд░реЗ рдпрд╛ рд▓рд╛рд▓ рд▓реЗрдмрд▓ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ More options рдореЗрдиреВ рдЦреЛрд▓реЗрдВ рдФрд░ Requests рдЪрдпрди рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдпрд╣рд╛рдВ рд▓рд╛рд▓ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЙрдирдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ Build config file is required рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреА Build config file is required , рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЯреНрд░реИрд╡рд┐рд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЖрдкрдХреА .travis.yml рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдЦреЛрдЬ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВ рдФрд░ рддреНрд░реБрдЯрд┐ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдЧреАред

рдЯреНрд░реИрд╡рд┐рд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдИрдореЗрд▓ рднреЗрдЬрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдЕрд╕рдлрд▓ рд╣реИ, рдФрд░ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЖрдк PR рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд┐рдЯ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрд┐рд▓реНрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдЧрд╛ред

рдЕрдм рдХреЛрдб рдХреЛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред

рдЪрд░рдг 8. рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХрд╡рд░реЗрдЬ рдХрд╛ рдЖрдХрд▓рди рдХрд░рдирд╛


рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХрд╡рд░реЗрдЬ рдкрд░ рд░рд┐рдкреЛрд░реНрдЯ рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛрдб рдХреЗ рдХрд┐рд╕ рднрд╛рдЧ рдореЗрдВ, рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдРрд╕реА рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо pytest-cov рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

requirements_dev.txt рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐ рдХреЛ requirements_dev.txt рдлрд╝рд╛рдЗрд▓:

 pytest-cov==2.6.1 

рдирд┐рдореНрди рдЖрджреЗрд╢ рдЪрд▓рд╛рдПрдБ:

 pytest --cov=my_project_name 

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, pytest --cov=notebookc рдХрдорд╛рдВрдб pytest --cov=notebookc рдХреЗ рдмрд╛рдж, рдирд┐рдореНрди рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЧрдИ рдереАред


рдХреЛрдб рдХрд╡рд░реЗрдЬ рд░рд┐рдкреЛрд░реНрдЯ

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

рдЕрдм рдЖрдЗрдП рдПрдХ рдЙрдкрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрддрд┐рд╣рд╛рд╕ рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЪрд░рдг 9. рдХрд╡рд░реЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдХрд╡рд░рд▓реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЖрдкрдХреЛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХрд╡рд░реЗрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


coveralls

рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреЗ GitHub рдЦрд╛рддреЗ рдХреЗ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдЗрдЯ https://coveralls.io/ рдкрд░ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдлрд┐рд░ рдЖрдкрдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

requirements_dev.txt рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд▓рд╛рдЗрди coveralls==1.6.0 рдЬреЛрдбрд╝реЗрдВ coveralls==1.6.0 ред рдпрд╣ рдлрд╝рд╛рдЗрд▓, рд╡реИрд╕реЗ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХреЗ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

 pip==19.0.3 wheel==0.33.0 twine==1.13.0 pytest==4.3.0 pytest-cov==2.6.1 coveralls==1.6.0 

.travis.yml рдлрд╝рд╛рдЗрд▓ рдХреЛ .travis.yml , рдЗрд╕реЗ рдЗрд╕ рд░реВрдк рдореЗрдВ рд▓рд╛рддреЗ рд╣реИрдВ (рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд╛рдо рдпрд╣рд╛рдВ рд╣реЛрдЧрд╛):

 dist: xenial language: python python: 3.7.2 install: тАФ pip install -r requirements_dev.txt тАФ pip install -e . script: тАФ pytest --cov=my_package_name after_success: тАФ coveralls 

рдЕрдм, рдЬрдм рдЯреНрд░реИрд╡рд┐рд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧрд╛, рддреЛ рд╡рд╣ рдЖрд╡рд╢реНрдпрдХ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛, рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдЧрд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЗ рдХрд╡рд░реЗрдЬ рдкрд░ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рддреИрдпрд╛рд░ рдХрд░реЗрдЧрд╛ред рдлрд┐рд░ рдЗрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ Coveralls рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред

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


рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ, рдЯреЗрд╕реНрдЯ рдХрд╡рд░реЗрдЬ рд░рд┐рдкреЛрд░реНрдЯ

рдЕрдм, PR рдЪреЗрдХ рдХреЗ рдмреАрдЪ, Coveralls рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЪреЗрдХ рднреА рд╣реИред

Coveralls рдкреГрд╖реНрда рдкрд░, рдЖрдк рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ 100% рдХрд╡рд░ рд╣реИред


рдЯреЗрд╕реНрдЯ рдХрд╡рд░реЗрдЬ рдЬрд╛рдирдХрд╛рд░реА

рдЕрдм рд╣рдо рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдПрдХ рдФрд░ рдЙрдкрдпреЛрдЧреА рдЙрдкрдХрд░рдг рд╕реЗ рд▓реИрд╕ рдХрд░рддреЗ рд╣реИрдВред

рдЪрд░рдг 10. PyUp рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдХрд░рдирд╛


PyUp.io рд╕реЗрд╡рд╛ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЙрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдкреБрд░рд╛рдиреА рд╣реИрдВ рдФрд░ рдХреНрдпрд╛ рдЙрдирдХреА рдХрдордЬреЛрд░рд┐рдпрд╛рдВ рд╣реИрдВред рдпрд╣ рд╕реЗрд╡рд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ GitHub рдкрд░ рдкреИрдХреЗрдЬ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреА рд╣реИред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ - https://pyup.io/ рдкрд░ GitHub рдЦрд╛рддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЬреЛрдбрд╝рддреЗ рд╕рдордп, every week Update Schedules рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдпрджрд┐ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрдИ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реИрдВ, рддреЛ рдЖрдк рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред


рдЕрдкрдбреЗрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ

рдпрд╣рд╛рдБ рдкреИрдХреЗрдЬ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреИрд╕реА рджрд┐рдЦрддреА рд╣реИ, рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдкреБрд░рд╛рдиреА рд╣реИрдВ, PyUp.io рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ред


рдкреИрдХреЗрдЬ рд╡рд┐рд╡рд░рдг

рдЗрд╕ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЬ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХрдм рдирд┐рдХрд▓рддреЗ рд╣реИрдВред рдЬреНрдЮрд╛рди, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдЖрдзреА рдЬреАрдд рд╣реИред рдФрд░ рджреВрд╕рд░реА рдЫрдорд╛рд╣реА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреБрд▓-рдЕрдиреБрд░реЛрдз рд╣реИред

рдкрд░рд┐рдгрд╛рдо


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдЖрдкрдиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдкрд╛рдпрдерди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдмреНрд▓реИрдХ, рдкрд╛рдЗрд╕реНрдЯреЗрд╕реНрдЯ, рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ, рдХрд╡рд░реЙрд▓реНрд╕ рдФрд░ PyUp рдЬреИрд╕реЗ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред рд╡реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрднрд░рддрд╛, рдкреНрд░рд╛рд░реВрдк рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рддреНрдпрд╛рдкрди рдФрд░ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпреЗ рдЙрдкрдХрд░рдг рдЙрдкрдпреЛрдЧреА рд▓рдЧреЗрдВрдЧреЗред

рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдкрд╛рдпрдерди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЖрдк рдХрд┐рди рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ?

Source: https://habr.com/ru/post/hi444344/


All Articles