рдХрдВрд╕реЛрд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЗрд╕реЗ PyPI рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВред рдареАрдХ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкрд╛рдЗрдк рдЗрдВрд╕реНрдЯреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП, рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╖рдп рдкрд░ рдкрд╛рдП рдЧрдП рдкреЛрд╕реНрдЯ рдкрд░ рдареЛрдХрд░ рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ , рдЬреЛ рди рдХреЗрд╡рд▓ 2014 рд╕реЗ, рдЖрдкрдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ (рдЖрдк) рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдмрдирд╛рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
2019 рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рд┐рд░рджрд░реНрдж рдХреЗ рдмрд┐рдирд╛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП? рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдпрд╣ рдкреНрд░рд╢реНрди рдкреВрдЫ рд▓рд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП, рдПрдХ рдЯрди рджрд╕реНрддрд╛рд╡реЗрдЬ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдпрд╣ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдмрдирд╛рдпрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рд╣реИред
1. PyPI ( рдкрдВрдЬреАрдХрд░рдг рд▓рд┐рдВрдХ ) рдкрд░ рдПрдХ рдЦрд╛рддрд╛ рдмрдирд╛рдПрдБ
2. рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдмрдирд╛рдПрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдПрдВрдЯреНрд░реАрд╣реЛрдо рдлрд╝рд╛рдЗрд▓)
def main(): print("It's alive!")
3. рдХрд╡рд┐рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python source $HOME/.poetry/env
(рдЖрдк рдХрд╡рд┐рддрд╛ рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рдЗрдк рдЗрдВрд╕реНрдЯреЙрд▓ - рдСрд╕рд░ рдХрд╡рд┐рддрд╛ - рд▓рдЧрднрдЧ рдЕрдиреБрд╡рд╛рджред)
4. рдПрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдПрдБ
cd myproject # , poetry init
5. рдХрдВрд╕реЛрд▓ рдХрдорд╛рдВрдб рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ (рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА pyproject.toml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ)
[tool.poetry.scripts] APPLICATION-NAME = 'entry:main'
рдПрдкреНрд▓рд┐рдХреЗрд╢рди-рдирд╛рдо рдХрдВрд╕реЛрд▓ рдХрдорд╛рдВрдб рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред
6. рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ! (рдЪрд░рдг 1 рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ)
poetry publish --username PYPI_USERNAME --password PYPI_PASS --build
рд╣реЛ рдЧрдпрд╛! рдЕрдм рджреВрд╕рд░реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рджреЛ рдХрдорд╛рдВрдб рдЪрд╛рд╣рд┐рдП:
$ sudo pip install PROJECT-NAME $ APPLICATION-NAME
рдЬрд╣рд╛рдВ PROJECT-NAME рд╡рд╣ рдирд╛рдо рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ 4 рдореЗрдВ рджрд┐рдпрд╛ рдерд╛, рдФрд░ APPLICATION-NAME рдЯреАрдо рдХрд╛ рдирд╛рдо рдЪрд░рдг 5 рд╕реЗ рд╣реИред
рд╕рдВрд╕реНрдХрд░рдг рдЕрджреНрдпрддрди
рдЬрдм рднреА рдЖрдк рдХрд┐рд╕реА рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдмрд╕ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдХреЛ pyproject.toml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓реЗрдВ :
version = "0.1.0"
рдФрд░ рдЪрд░рдг 6 рдХреЛ рджреЛрд╣рд░рд╛рдПрдВ:
poetry publish --username PYPI_USERNAME --password PYPI_PASS --build
рдмреЛрдирд╕: рдСрдЯреЛ-рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрд╡рд┐рд╕ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВ
рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ .travis.yml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
language: python dist: xenial before_install: - curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python - source $HOME/.poetry/env install: - poetry install script: - poetry build deploy: - provider: script skip_cleanup: true script: poetry publish --username $PYPI_USER --password $PYPI_PASS on: branch: master python: '3.7' tags: true
рдФрд░ рдЯреНрд░реИрд╡рд┐рд╕-ci.com рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ PYPI_USER рдФрд░ PYPI_PASS рд╕реЗрдЯ рдХрд░реЗрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреИрдХреЗрдЬ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
git tag -a v1.2 # Replace version number with yours git push --tags