Pipenv: setup.py install_requires рдФрд░ Pipfile рдХреЛ рд╕рд┐рдВрдХ рдореЗрдВ рдХреИрд╕реЗ рд░рдЦреЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 3 рдЬрдире░ 2018  ┬╖  49рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pypa/pipenv

рдореИрдВ рдкрд┐рдкреЗрдирд╡ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд╛рдпрдерди рдкреИрдХреЗрдЬ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдЕрдкрдиреЗ рдкрд┐рдкрдлрд╛рдЗрд▓ рдХреА рд░рдирдЯрд╛рдЗрдо рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХ рдореЗрдВ setup(install_requires=...) рд░рдЦрдиреЗ рдХреА рдЪреБрдиреМрддреА рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдХреЛрдИ рдЕрдиреБрд╢рдВрд╕рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ?

[рдЙрддреНрддрд░ 2019-08-23] рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рднреА рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ:

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

рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЧрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдкрдиреА рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ install_requires рдореЗрдВ рд░рдЦрд╛ рд╣реИред

рдлрд┐рд░ рдореИрдВ pipenv install '-e .' рдЪрд▓рд╛рдХрд░ рдЕрдкрдирд╛ рдкрд┐рдкрдлрд╛рдЗрд▓ setup.py рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реВрдВред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

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

рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЧрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдкрдиреА рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ install_requires рдореЗрдВ рд░рдЦрд╛ рд╣реИред

рдлрд┐рд░ рдореИрдВ pipenv install '-e .' рдЪрд▓рд╛рдХрд░ рдЕрдкрдирд╛ рдкрд┐рдкрдлрд╛рдЗрд▓ setup.py рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реВрдВред

[рдЕрджреНрдпрддрди 2019-08-23] рдореИрдВ рдЖрдЬрдХрд▓ рдкрд┐рдкрдлрд╛рдЗрд▓ рдореЗрдВ рджреЗрд╡ рдкреИрдХреЗрдЬ рд░рдЦрддрд╛ рд╣реВрдВ, рдХреЗрд╡рд▓ рд░рдирдЯрд╛рдЗрдо рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ setup.py рдореЗрдВ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рддрд╛ рд╣реИред

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

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

from setuptools import setup
from pipenv import find_install_requires

setup(
    # ...
    install_requires=find_install_requires()
    # ...
)

рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЗрд╡рд▓ pipfiles [packages] рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЪрд╛рдмрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рдкрд┐рдкреЗрдирд╡ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рднреА рдХреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдкрд┐рдкрдлрд╛рдЗрд▓ , рдкрд┐рдкреЗрдирд╡ рдХреЗ рдкрд┐рдкрдлрд╛рдЗрд▓ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

import pipfile
pf = pipfile.load('LOCATION_OF_PIPFILE')
print(pf.data['default'])

рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛, рдпрд╛ setup.py рдореЗрдВ Pipenv рдХреЗ рдЖрдзрд╛рд░ рдкрд░ред pipenv (рдпрд╛ pipfile ) рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЗ рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдкрд┐рдкреЗрдирд╡ рдЬреИрд╕реЗ рдЙрдкрдХрд░рдг рдмрд┐рдирд╛ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЗрд╕рдореЗрдВ рдЭрд╛рдВрдХрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ ( setup.py egg_info ) рдЬреАрддрд╛ рдХрд╛рдо рдирд╣реАрдВред Setup.py рдХреЗрд╡рд▓ Setuptools рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдХ рдордзреНрдпрдо рдЬрдореАрдиреА рд╕рдорд╛рдзрд╛рди рдмрдореНрдкрд╡рд░реНрд╕рди рдХреЗ рд╕рдорд╛рди рдПрдХ рдЙрдкрдХрд░рдг рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд┐рдкрдлрд╛рдЗрд▓ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд┐рдВрдХ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдВ, рдФрд░ рдЗрд╕реЗ setup.py рдореЗрдВ рдкрдврд╝реЗрдВред рдлрд┐рд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдЖрдИ рдпрд╛ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдХрд┐ рдлрд╛рдЗрд▓реЗрдВ рд╣рдореЗрд╢рд╛ рд╕рд┐рдВрдХ рдореЗрдВ рд╣реЛрдВред

рд╣рд╛рдБ рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ рдореБрдЭреЗ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВред
рд╢рд╛рдпрдж "рдкрд┐рдкреЗрдирд╡ рдЗрдВрд╕реНрдЯреЙрд▓" рд╕рд┐рдВрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рд╕реЛрдо, 8 рдЬрдирд╡рд░реА 2018 рдХреЛ рд╢рд╛рдо 5:04 рдмрдЬреЗ, рддреНрдЬрд╝реБ-рдкрд┐рдВрдЧ рдЪреБрдВрдЧ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

Pipfile https://github.com/pypa/pipfile , рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ
рдкрд╛рд░реНрд╕рд┐рдВрдЧ, рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

рдкрд╛рдЗрдкрдлрд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░реЗрдВ
pf = pipfile.load ('LOCATION_OF_PIPFILE')
рдкреНрд░рд┐рдВрдЯ (рдкреАрдПрдлред рдбреЗрдЯрд╛ ['рдбрд┐рдлрд╝реЙрд▓реНрдЯ'])

рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛, рдпрд╛ setup.py рдореЗрдВ Pipenv рдХреЗ рдЖрдзрд╛рд░ рдкрд░ред
pipenv (рдпрд╛ pipfile) рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдХрд┐ рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдФрд░ рдкрд┐рдкреЗрдирд╡ рдЬреИрд╕реЗ рдЙрдкрдХрд░рдг рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕рдореЗрдВ рдЭрд╛рдВрдХреЗрдВ (setup.py Egg_info) рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
setup.py рдХреЗрд╡рд▓ Setuptools рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдХ рдордзреНрдпрдо рдЬрдореАрдиреА рд╕рдорд╛рдзрд╛рди рдмрдореНрдкрд╡рд░реНрд╕рди рдХреЗ рд╕рдорд╛рди рдПрдХ рдЙрдкрдХрд░рдг рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛
https://github.com/peritus/bumpversion рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рд╕рд┐рдВрдХ рдХрд░рддрд╛ рд╣реИ
рдкрд┐рдкрдлрд╛рдЗрд▓ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдлрд╛рдЗрд▓ред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдВ, рдФрд░ рдЗрд╕реЗ рдкрдврд╝реЗрдВ
setup.py рдореЗрдВ рдлрд┐рд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдЖрдИ рдпрд╛ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдХрд┐ рдлрд╛рдЗрд▓реЗрдВ рд╣рдореЗрд╢рд╛ рд╣реИрдВ
рдореЗрд▓ рдореЗрдВред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереАред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/pypa/pipenv/issues/1263#issuecomment-355889369 , рдпрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
рд╕реВрддреНрд░
https://github.com/notifications/unsubscribe-auth/ALMBlmmV52kdIL9D4zlMJoQh2JpaGdDbks5tIa_jgaJpZM4RRu3v
.

@uranusjr рдпрд╣рд╛рдВ рдореЗрд░реА рдзрд╛рд░рдгрд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ pipenv рдХреЛ setup.py рдХреЗ setup_requires рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП, рдФрд░ рдПрдХ setuptools рдХрдорд╛рдВрдб рдореЗрдВ pipenv рдЖрдпрд╛рдд рдореЗрдВ рджреЗрд░реА рд╣реЛ? рдпрд╛ рдЗрд╕реЗ рдмреБрд░рд╛ рдЕрднреНрдпрд╛рд╕ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ?

@ рдХреЛрд░рд┐рдЬрди рдпрд╣ рдкреНрд░рддрд┐ рд╕реЗ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдпрдерди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдкрд┐рдкреЗрдирд╡ рдХреА рдПрдХ рдкреНрд░рддрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬреЛ рдмрд╣реБрдд рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реИред Pipenv рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ (рдЖрдорддреМрд░ рдкрд░ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░) рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдХреЗ рдмрд╛рд╣рд░ рдЗрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдХреЗ рдЕрдВрджрд░ред

рддреЛ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдпрд╣ рдореБрджреНрджрд╛ рдмрдВрдж рд╣реЛ рдЧрдпрд╛? рдХреНрдпрд╛ Pipfile рдФрд░ setup.py рдореЗрдВ рджреЛрдиреЛрдВ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрдиреЗ рдХрд╛ рдХреЛрдИ рд╕рд╛рдзрди рдирд╣реАрдВ рд╣реИ? рдХреНрдпрд╛ рдХреЛрдИ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рд╣реИ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ?

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

рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЧрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдкрдиреА рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ install_requires рдореЗрдВ рд░рдЦрд╛ рд╣реИред

рдлрд┐рд░ рдореИрдВ pipenv install '-e .' рдЪрд▓рд╛рдХрд░ рдЕрдкрдирд╛ рдкрд┐рдкрдлрд╛рдЗрд▓ setup.py рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реВрдВред

[рдЕрджреНрдпрддрди 2019-08-23] рдореИрдВ рдЖрдЬрдХрд▓ рдкрд┐рдкрдлрд╛рдЗрд▓ рдореЗрдВ рджреЗрд╡ рдкреИрдХреЗрдЬ рд░рдЦрддрд╛ рд╣реВрдВ, рдХреЗрд╡рд▓ рд░рдирдЯрд╛рдЗрдо рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ setup.py рдореЗрдВ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @ рдХреЛрд░рд┐рдЬрди рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред рдкрд┐рдкрдлрд╛рдЗрд▓ (рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБред txt) рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ; setup.py рд╕рдВрдХреБрд▓ рдХреЗ рд▓рд┐рдП рд╣реИред рд╡реЗ рд╡рд┐рднрд┐рдиреНрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреА рдкреВрд░реНрддрд┐ рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд░ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЧрд▓рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдЖрдИрдПрдордУ)ред

@uranusjr рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд╣реАрдВред

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

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

рд╢рд╛рдпрдж рдореИрдВ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛ рд░рд╣рд╛ рд╣реВрдБред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЕрдкрдиреЗ рдмрдпрд╛рди рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ?

рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдордЭрд╛, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ pipenv PHP рдХреЗ рд▓рд┐рдП рдХрдВрдкреЛрдЬрд░ рдХреЗ рд╕рдорд╛рди рдПрдХ рдкреВрд░реНрдг рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реЛрдиреЗ рд▓рдЧрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ pipenv рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдПрдХ Pipfile рдФрд░ Pipfile.lock рд╣реИ, рд▓реЗрдХрд┐рди setup.py рдореЗрдВ рдХреЛрдИ install_requirements рдирд╣реАрдВ рд╣реИред

@vascowhite рдЬреЛ рд╕рд╡рд╛рд▓ рдЖрдк рдкреВрдЫ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдкрд┐рдкреЗрдирд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдмрд▓реНрдХрд┐ рдкрд╛рдЗрдерди рдкреИрдХреЗрдЬрд┐рдВрдЧ рдЯреВрд▓реНрд╕ рдХреЗ рдмреАрдЪ рдореМрд▓рд┐рдХ рдЕрд▓рдЧрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдкрд╛рдпрдерди рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ, setup.py рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рддрд░рдг рдпреЛрдЧреНрдп рдкреИрдХреЗрдЬ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдирд┐рд░реНрднрд░рддрд╛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ requests рдЬреИрд╕рд╛ рдкреИрдХреЗрдЬ рд╣реИ, рдФрд░ рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ cffi рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ setup.py рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░реВрдВрдЧрд╛ рддрд╛рдХрд┐ рдЬрдм рд▓реЛрдЧ pip install requests рдЪрд▓рд╛рдПрдВ

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

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

@techalchemy рдореИрдВ рдЖрдкрдХреЗ рдкреЙрдк рдЕрдк рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реА рддрд░рд╣ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдзрд╛ рд░рд╛рд╕реНрддрд╛ рдерд╛ (рд╕рдм рдХреБрдЫ рд╣рдЯрд╛ рджреЗрдВ)

рдореИрдВ рдпрд╣ рднреА рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ @vascowhite рдЬреЛ рдЖрдк рдкреВрдЫ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдЪрд┐рддреНрд░ рдирд╣реАрдВ рд╣реИред рдкрд┐рдкрдлрд╛рдЗрд▓ рдФрд░ рд▓реЙрдХ рдлрд╛рдЗрд▓ рджреЛрдиреЛрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рд╕рдореЗрдЯрдирд╛ рд╕рдВрднрд╡ рд╣реИред рдПрдХ рдЖрджрд░реНрд╢ рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдкрд┐рдкрдлрд╛рдЗрд▓ setup.py рдХреЗ install_requires рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд▓реЙрдХ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдареЛрд╕ рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ.txt рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкрд╛рдпрдерди рдХреА рдкреИрдХреЗрдЬрд┐рдВрдЧ рдкреНрд░рдгрд╛рд▓реА рд╡рд░реНрддрдорд╛рди рд╕рдордп рдореЗрдВ рдЖрджрд░реНрд╢ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ, рдФрд░ рдРрд╕рд╛ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдлрд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╣реЗрдХ, рдкрд┐рдкреЗрдирд╡ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реЛ рд░рд╣реА рд╣реИ (рдкреАрдПрд╕ рдХрд┐рд╕реА рдХреА рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИ), рдпрд╣ рд╢рд╛рдпрдж рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдПред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрд╢рд╛ рдирд╣реАрдВ рдЦреЛрдИ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдореЗрд░реА рдирд╣реАрдВ)ред рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдЗрд░реНрдж-рдЧрд┐рд░реНрдж рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреАрдИрдкреА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реЗрдЯрдЕрдк.py рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ.txt рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЪреАрдЬреЗрдВ рд╕рд╣реА рд░рд╛рд╕реНрддреЗ рдкрд░ рд╣реИрдВ, рджреЛрдиреЛрдВ рдПрдХ рдХрдареЛрд░, рдШреЛрд╖рдгрд╛рддреНрдордХ рдкреНрд░рд╛рд░реВрдк рдХреА рдУрд░ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВред рдЗрддрдиреЗ рдмрдбрд╝реЗ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде, рдЪреАрдЬреЛрдВ рдХреЛ рдзреАрд░реЗ-рдзреАрд░реЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ (рдпрд╛ рдкрд╛рдпрдерди 3.0 рджреЗрдЦреЗрдВ), рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВред

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

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

рдпрджрд┐ рдЖрдк рдКрдкрд░ рдмрддрд╛рдИ рдЧрдИ рдореЗрд░реА рд╕рд▓рд╛рд╣ рдкрд░ рдХрд╛рдпрдо рд░рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк setup.py рдФрд░ pipenv рджреЛрдиреЛрдВ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рдордВрдЬрд╕реНрдп рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдм рдЙрддрд╛рд╡рд▓реЗ рд╣реЛрдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред :)

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдореИрдВ рдЕрдХреЗрд▓рд╛ рдирд╣реАрдВ рд╣реВрдБ #1398

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЬрд┐рддрдирд╛ рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдЙрд╕рд╕реЗ рдХрд╣реАрдВ рдЬреНрдпрд╛рджрд╛ рдмреЗрд╣рддрд░ рд░рдЦреЛ :)

рдПрдХ setup.py $ рдХреЗ рд╕рд╛рде pipenv рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдЖрдП; рдЪрд░реНрдЪрд╛ рдореЗрдВ рдореЗрд░реЗ .2 рд╕реЗрдВрдЯ рдЬреЛрдбрд╝рдирд╛ред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрдЬрдЧрд░ рдкреИрдХреЗрдЬ рд╣реИ рдЬреЛ setup.py рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

 setup(                                                                                                     
    name='my-pkg-name',                                                                             
    packages=find_packages(),                                                                              
    install_requires=[...],
    extras_require={
        'develop': ['click']
    },
    entry_points={
        'console_scripts': [
            'my-pkg-name-cmdline = my-pkg-name.cli:tool'
        ]
    }

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдВрдЯреНрд░реАрдкреЙрдЗрдВрдЯ рдореЗрдВ click рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рдЬрдм рдореИрдВ $ my-pkg-name-cmdline build рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ click рдЗрдВрд╕реНрдЯреЙрд▓ рдирд╣реАрдВ рдорд┐рд▓рддрд╛, рдХреНрдпреЛрдВрдХрд┐ pipenv install --dev pipenv virtualenv рдореЗрдВ рдкреИрдХреЗрдЬ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП pipenv shell/exit рдХреЗ рд╕рд╛рде рдлреАрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рдЕрднреА рднреА рдХреБрдЫ рдЦреБрд░рджреБрд░реЗ рдХрд┐рдирд╛рд░реЗ рд╣реИрдВред

рдЗрд╕рд▓рд┐рдП +1 рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП pipenv рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрд╕реЗ рдЙрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ pipenv run my-pkg-name-cmdline build рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рдЬрд╛рддреА рд╣реИред

@ рдХреЛрд░рд┐рдЬрди рдореИрдВ рдЕрднреА рднреА рд╕рд╣реА рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ (рдЕрднреА рднреА рдкрд┐рдкреЗрдирд╡ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ)ред

рдЕрднреА рддрдХ, рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рд╣реИ:

(starting from scratch)
1- pipenv --three
2- pipenv install [--dev]
3- pipenv install -e . (install application locally)
4- pipenv shell (to enter the virtualenv)

рдЕрдм рдореИрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдЕрдкрдирд╛ рдкреИрдХреЗрдЬ рдмрд┐рд▓реНрдб click рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реВрдВред

рдЕрдЧрд░ рдореИрдВ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ (рдЪрд░рдг 3) рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ (рдЪрд░рдг 4) рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╢рд╛рдпрдж рдореБрдЭреЗ рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рджрд┐рдорд╛рдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдкреИрдХреЗрдЬ pipenv shell рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП ( virtualenv рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рд╕рдХреНрд░рд┐рдп рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ)ред

@apiraino рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣реАрдВ рдЪреАрдЬрд╝ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣реА рд╣реИред рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдореЗрдВ рдХреНрд▓рд┐рдХ (рдЖрдпрд╛рдд) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп install_requires рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдЖрдкрдХреЗ рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ (рд╕реНрд╡рдпрдВ рд╕рд╣рд┐рдд) рдХреНрд▓рд┐рдХ рднреА рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рд╕рдХреЗрдВред рдЗрд╕реЗ extras_require['dev'] рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рд╣реИ, рдпрд╛рдиреА рдЖрдкрдХрд╛ рдкреИрдХреЗрдЬ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрди рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдПрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИрдВред

рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдм рдкрд┐рдкреЗрдирд╡ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рдордВрдЪ рдкрд░ рд▓рд╛рдПрдБ, рдЬреИрд╕реЗ рдХрд┐ StackOverflow рдпрд╛ Python- рд╕рдВрдмрдВрдзрд┐рдд рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪрд┐рдпрд╛рдБред

@Korijn pipenv install '-e .' рдПрдХ Pipfile $ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ setup.py рдореЗрдВ install_requires рдХреЗ рддрд╣рдд рд╕реВрдЪреАрдмрджреНрдз рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдкрд┐рдкреЗрдирд╡ 9.0.3 рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдпрд╣реА рд╕реНрдерд┐рддрд┐ рд╣реИред

рдореИрдВ рдЕрдкрдиреЗ setup.py рдХреЗ install_requires рд╕реЗ Pipfile рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХрд╛ рдкреНрд░рдпреЛрдЧ рди рдХрд░реЗрдВ

рдореИрдВрдиреЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ Pipfile рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ install_requires рдЕрдиреБрднрд╛рдЧ рд╕реЗ рд╡рд┐рд╡рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ setup.py ред

@рдмреЗрдВрдЬрд╛рдорд┐рдирд╡реЗрдм рдореИрдВ рдЖрдЬ рдЙрд╕реА рдЪреАрдЬрд╝ рд╕реЗ рднреНрд░рдорд┐рдд рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рд▓рдЧрдиреЗ рд▓рдЧрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

@techalchemy рдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐

рдкрд┐рдкрдлрд╛рдЗрд▓ рдореЗрдВ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдЬрд╣рд╛рдВ рд╕рдВрднрд╡ рд╣реЛ рд╡рд╣рд╛рдВ рдЕрдирдкрд┐рди рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рдЖрдк рдХреЛрдИ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕рдХреА setup.py рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рд╕рд░реНрд╡реЛрддреНрддрдо рдорд┐рд▓рд╛рди рдХреЗ рд▓рд┐рдП рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреА рдЕрдиреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рднреА рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк https://github.com/pypa/pipenv/issues/1263#issuecomment -362600555 рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдм рдЖрдк рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ Pipfile рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ pipenv install '-e .' рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ pipenv рдПрдХ рдирдпрд╛ Pipfile рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд:

[packages]

"e1839a8" = {path = ".", editable = true}

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХрдорд╛рддреНрд░ рдкреИрдХреЗрдЬ рдкреИрдХреЗрдЬ рд╣реА рд╣реИ (рдпрд╛рдиреА "ред"), рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ "ред" рдкрд┐рдкрдлрд╛рдЗрд▓ рдореЗрдВ ( [packages] ) рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣, рдпрджрд┐ рдЖрдк pipenv install requests , рддреЛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ setup.py рд╕реЗ install_requires рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ Pipfile рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрдирд╛ рдЪрд░рдг рдЖрдЧреЗ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рд╕рдорд╛рдзрд╛рди рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ install_requires рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реНрдерд╛рдкрд┐рдд рдХреА рдЬрд╛рдПрдВрдЧреА ред

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

рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рдЧрд▓рдд рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ @techalchemy рдпрд╛ @uranusjr рдЗрд╕ рдмрд╛рдд рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХрд╛ рдпрд╣ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИ?

рдЖрдкрдХреА рд╕реЛрдЪ рдореЗрд░реЗ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рдореИрдВ рдпрд╣ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╣рд╛рд▓ рд╣реА рдореЗрдВ Setuptools рдЙрдиреНрдирддрд┐ рдФрд░ Flit рдЬреИрд╕реЗ рдЯреВрд▓ рдХреЗ рд╕рд╛рде рдЖрдк рдЕрднреА рднреА рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЕрдЪреНрдЫреЗ TOML рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╕реЗрдЯрдЕрдк рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдмрдЬрд╛рдп, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИ)ред рдЖрдк рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдкрд┐рдкрдлрд╛рдЗрд▓ рдХреЗ рдмрдЬрд╛рдп pyproject.toml рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред

@uranusjr рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬреЛ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдкрд┐рдкрдлрд╛рдЗрд▓ рдХреЛ рдХреЗрд╡рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реЗрдЯрдЕрдк рдЯреВрд▓ рдпрд╛ рдлреНрд▓рд┐рдЯ (setup.py рдпрд╛ pyproject.toml рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рджреНрд╡рд╛рд░рд╛ рдХреИрдкреНрдЪрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ setup.py рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

install_requires=['A'],
extras_require={
    'dev': ['B'],
},

рддрдм рдкрд┐рдкрдлрд╛рдЗрд▓ рдХреЛ рдХреЗрд╡рд▓ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:

[[source]]

url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"


[packages]

"e1839a8" = {path = ".", editable = true}


[dev-packages]

"e1839a8" = {path = ".", extras = ["dev"], editable = true}

pipenv install рдЪрд▓рд╛рдиреЗ рд╕реЗ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ A рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдЧреА, рдФрд░ pipenv install --dev рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ A рдФрд░ B рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧреАред

рдпрджрд┐ рдХреЛрдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Setuptools рдпрд╛ Flit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ [packages] рдпрд╛ [dev-packages] рдХреЗ рддрд╣рдд Pipfile рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ рд╡рд┐рдХрд╛рд╕ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ [dev-packages] рдХреЗ рддрд╣рдд рдкрд┐рдкрдлрд╛рдЗрд▓ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВ, рд▓реЗрдХрд┐рди install_requires рдФрд░ test_requirements рдирд┐рд░реНрднрд░рддрд╛ рд╕рднреА рд╕реЗрдЯрдЕрдк рдореЗрдВ рдХреИрдкреНрдЪрд░ рдХреА рдЧрдИ рд╣реИрдВ .py.

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкрд┐рдкрдлрд╛рдЗрд▓ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдпрджрд┐ рдЖрдк рд╕реЗрдЯрдЕрдкрдЯреВрд▓ рдпрд╛ рдлреНрд▓рд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдХреНрдпрд╛ рдпреЗ рд╕рд╣реА рд╣реИ? рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд╕рдЪ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИрдВ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд╕рдВрдж рд╣реИред рджреЗрд╡ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ extras_require[dev] рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ рдХреЗрд╡рд▓ рдПрдХ рдкрд░рдВрдкрд░рд╛ рд╣реИ; dev-packages OTHO рдПрдХ рд╕реБрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреБрдВрдЬреА рд╣реИред extras_require[dev] рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ pip install package[dev] рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░реЗрдЧрд╛, рдЬреЛ рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд▓реЛрдЧ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред

packages рдХреЗ рд▓рд┐рдП, рдирд╣реАрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдХреЛрдИ рдкрд░рд┐рджреГрд╢реНрдп рдирд╣реАрдВ рд╣реИ рдЬреЛ install_requires IMO рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд▓реЛрдЧ рд░рдЪрдирд╛рддреНрдордХ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдЖрдПрдВрдЧреЗред

рдпрд╣ рдореБрджреНрджрд╛ рдХреНрдпреЛрдВ рдмрдВрдж рд╣реИ?

@JulienPalard рдпрд╣ рдХреБрдЫ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдмрдВрдж рд╣реИ:

  1. рдкрд┐рдкрдлрд╛рдЗрд▓ рдФрд░ setup.py рдлрд╛рдЗрд▓реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рдВрдХ рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИрдВ, рдкреНрд░рддрд┐ рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╡рд░рдгреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЗрдЦреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЯреАрдПрд▓; рдбреЙ Pipfile рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ рд╢реАрд░реНрд╖ рд╕реНрддрд░ requirements.txt
  2. рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ (рдорд╛рди рд▓реЗрдВ рдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИ) рдХрд╛ setup.py рдкреНрд░рдмрдВрдзрд┐рдд рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдореЗрдВ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗрд╡рд▓ pipenv install -e . рд╣реЛрдЧрд╛ - рдпрд╣ рдЖрдкрдХреЗ Pipfile рдореЗрдВ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдбрд╛рд▓рддрд╛ рд╣реИ Pipfile.lock рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ install_requires рд╕рд╣рд┐рддред рдпрджрд┐ рдЖрдк рдПрдХ рдкрд░рд┐рд╡рд░реНрддрд┐рдд install_requires рдХреЗ рдХрд╛рд░рдг рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдХреЛ рдирд╡реАрдирддрдо рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ pipenv update рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ pipenv lock && pipenv sync рдХреЗ рд╕рдорд╛рди рд╣реИред

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реИ!

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗ Pipfile рд╕реЗ рдЕрдзрд┐рдХ рд╕рдорд╛рди рд╣реИрдВ, $#$ requirements.txt $#$ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ: requirements.txt рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдПрдХ рдлреНрд▓реИрдЯ рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрдмрдХрд┐ Pipfile рдФрд░ setup.py рдХреЗрд╡рд▓ рдкреНрд░рд╡реЗрд╢ рд╕реНрддрд░ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Pipfile.lock рдФрд░ requirements.txt рдореЗрдВ рд╕рдорд╛рди рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред

рдореИрдВрдиреЗ рдПрдХ POC рд╕рд┐рдВрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдИ рдЬрд┐рд╕реЗ рдЖрдЧреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ:
https://gist.github.com/iddan/f190c3c7d54f4fc4655da95fb185e641

@iddan рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдореИрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ, рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЪреАрдЬ рдЖрдкрдХреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреА рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреА рд╕реВрдЪреА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ _рдПрдкреНрд▓рд┐рдХреЗрд╢рди_ ( setup.py ) рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ _ рдЗрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ ( Pipfile )ред

setup.py рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкреВрд░реНрд╡ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдУрдкрди-рдПрдВрдбреЗрдб рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд┐рди рдХреА рдЧрдИ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╣реА рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдЬреИрд╕реЗ рдЖрдк requirements.txt рдХреЗ рд╕рд╛рде рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ рдпрд╣рд╛рдВ рдУрдкрди-рдПрдВрдбреЗрдб рдирд┐рд░реНрднрд░рддрд╛ рдкрд┐рдирд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред Pipfile рдЖрдк рд╕рдЦреНрдд рдпрд╛ рдвреАрд▓реЗ рдкрд┐рди рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реА рддрд░рд╣ рдЗрд╕реЗ рдЖрдкрдХреЗ рдирд┐рд░реНрднрд░рддрд╛ рдЧреНрд░рд╛рдл рдХреА _unflattened_ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ, рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпреЗ рджреЛрдиреЛрдВ рдЪреАрдЬреЗрдВ requirements.txt рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдиреНрдп рд╣реИрдВ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдмреАрдЪ рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдкрд░ рд▓рдЧрд╛рддрд╛рд░ рдЬреЛрд░ рджреЗ рд░рд╣рд╛ рд╣реВрдВред рдЖрдк рд╣рд░ рдмрд╛рддрдЪреАрдд рдФрд░ рд╣рд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдФрд░ рдкреАрдкреАрдП рджреНрд╡рд╛рд░рд╛ рдбрд╛рд▓реЗ рдЧрдП рд╕рднреА рдореИрд╕реЗрдЬрд┐рдВрдЧ рдореЗрдВ рдЗрд╕ рдкрд░ рдЬреЛрд░ рджреЗрддреЗ рд╣реБрдП рд╕реБрдиреЗрдВрдЧреЗред

Pipfile.lock рдФрд░ requirements.txt рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдирд╣реАрдВ рд╣реИрдВред рдЖрдк рдПрдХ Pipfile.lock requirements.txt рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдХрд┐рд╕реА рдордзреНрдпрд╕реНрде Pipfile рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕реАрдзреЗ рд▓реЙрдХрдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ Pipfile.lock рдПрдХ рд╕рдВрдХреНрд░рдордгреАрдп рдмрдВрдж рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рдПрдХ рдордзреНрдпрд╕реНрде Pipfile рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдореВрд▓ рдкреНрд░рд╢реНрди рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рд╕рдВрдкрд╛рджрди рдпреЛрдЧреНрдп рдкрде рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╢реНрди рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ setup.py рдлрд╝рд╛рдЗрд▓ рдХреЛ Pipfile рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХ рдореЗрдВ рд░рдЦрдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред рдЬрдм рдЖрдк pipenv lock рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ setup.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрд╡рддрдГ рд╣рд▓ рд╣реЛ рдЬрд╛рдПрдЧреАред рдореИрдВ рдЖрдкрдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, @iddan , рдпрд╛ рд╕реЗрдЯрдЕрдк рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╡рд╛рдкрд╕ рдЪреАрдЬреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкрд╛рд░реНрд╕рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЖрдк рдбреЛрдирд╛рд▓реНрдб рд╕реНрдЯрдл рдХреЗ рд▓реЗрдЦ рдХреЛ setup.py рдмрдирд╛рдо рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдкрд░ рдкрдврд╝рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред txt рдпрд╛ рд╣рдорд╛рд░реЗ рдПрдХ рдЕрдиреБрд░рдХреНрд╖рдХ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рднреЗрдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд┐рдкреЗрдирд╡ рдкрд░ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред

рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреЗ рд╣реЗрд▓реНрде рдореЗрдВ рд╣рдорд╛рд░реЗ рдЖрдВрддрд░рд┐рдХ рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рд░реЗрдкреЛ рд╣реИ рдЬреЛ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рд╕реЗрд╡рд╛рдПрдВ рд╣реИрдВ рдФрд░ рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЙрдкрднреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдо рдкреИрдХреЗрдЬ рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рдФрд░ рд╕реЗрд╡рд╛ рдХреЗ рджреЗрд╡/рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдмреАрдЪ рдЕрдкрдиреА рд╢реАрд░реНрд╖ рд╕реНрддрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рд╣рдо рдЕрдкрдиреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдкреЗрдирд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, Pipfile setup.py рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛

#2148 рдХреЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ (requirements.txt рдХреЛ рдкрд┐рдкрдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛)ред

рд▓реЗрдХрд┐рди рдпрд╣ setup.py . рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ

рдЗрд╕ред рдореБрджреНрджрд╛ред рдЪрд╛рд╣рд┐рдПред рдирд╣реАрдВред рд╣реЛрдирд╛ред рдмрдВрдж рдХрд┐рдпрд╛ рд╣реБрдЖред

рдпрд╣ рдореБрджреНрджрд╛ рдмрдВрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐

  1. рдкрд┐рдкреЗрдирд╡ рдПрдХ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реИ ред
  2. рдкрд┐рдкреЗрдирд╡ рдореЗрдВ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХрд╛рд░реНрдпрд╛рддреНрдордХрддрд╛рдУрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  3. рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкреИрдХреЗрдЬ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рд╡рд┐рдХрд╛рд╕ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдкреЗрдирд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  4. рдкрд┐рдкрдлрд╛рдЗрд▓ рдПрдХ рдЦреБрд▓рд╛ рдорд╛рдирдХ рд╣реИред рдкрд┐рдкрдлрд╛рдЗрд▓ рдлреЙрд░реНрдореЗрдЯ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдкреИрдХреЗрдЬрд┐рдВрдЧ рдЯреВрд▓ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкрд┐рдкреЗрдирд╡ рдиреЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рд╣реИ, рдпрд╣ рд╕реНрд╡рдпрдВ рдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

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

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

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

рдПрдХ рдХрд╛рдо рдХрд░реЛ рдФрд░ рдЕрдЪреНрдЫреЗ рд╕реЗ рдХрд░реЛ!

рд╣реЗрд▓реЛ рд╕рдм рд▓реЛрдЧ,

@ рдХреЛрд░рд┐рдЬрди рдореИрдВрдиреЗ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдкрдврд╝рд╛ рдЬрд╣рд╛рдВ рдЖрдк рдмрддрд╛ рд░рд╣реЗ рдереЗ рдХрд┐ рдЖрдк рдкрд┐рдкрдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде setup.py рдХреЛ рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП extra_requires рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рджреЗрдЦрд╛ рдХрд┐ Pipfile.lock рдореЗрдВ dev рдЕрдиреБрднрд╛рдЧ рдореЗрдВ extra_require рд╕рдВрдХреБрд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЦрд╛рд▓реА venv рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рд╣реИ рдФрд░ pipenv install --dev рдХрд░реЗрдВ , рдХреНрдпреЛрдВрдХрд┐ Pipfile.lock рдореЗрдВ extra_require рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рдирд╣реАрдВ рд╣реИрдВ pipenv рдХреЗрд╡рд▓ рд╕рдВрдХреБрд▓ рдХреЛ install_require рдкрд░ рд╕рдВрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред

setup.py

import os  # noqa: D100
from setuptools import setup, find_packages


def read(fname):
    """Read a file and return its content."""
    with open(os.path.join(os.path.dirname(__file__), fname)) as f:
        return f.read()


setup(
    name='auditor_client',
    version='0.0.0',
    description='Auditor client package',
    long_description=read('README.md'),
    packages=find_packages(exclude=['tests']),
    install_requires=['requests==2.9.1'],
    extras_require={'dev': ['flake8', 'flake8-docstrings', 'pytest', 'coverage', 'tox']},
    setup_requires=["pytest-runner"],
    tests_require=["pytest"]
)

рдкрд┐рдкрдлрд╛рдЗрд▓

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[packages]
"e1839a8" = {editable = true, path = "."}

[requires]
python_version = "3.6"

[dev-packages]
"e1839a8" = {editable = true, extras = ["dev"], path = "."}

рдкрд┐рдкрдлрд╛рдЗрд▓.рд▓реЙрдХ

{
    "_meta": {
        "hash": {
            "sha256": "e58b833e497814c83a2f0b93ad21d33a2af8b72721b20e9607a6c9135978422d"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "3.6"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
        "e1839a8": {
            "editable": true,
            "path": "."
        },
        "requests": {
            "hashes": [
                "sha256:113fbba5531a9e34945b7d36b33a084e8ba5d0664b703c81a7c572d91919a5b8",
                "sha256:c577815dd00f1394203fc44eb979724b098f88264a9ef898ee45b8e5e9cf587f"
            ],
            "version": "==2.9.1"
        }
    },
    "develop": {
        "e1839a8": {
            "editable": true,
            "path": "."
        },
        "requests": {
            "hashes": [
                "sha256:113fbba5531a9e34945b7d36b33a084e8ba5d0664b703c81a7c572d91919a5b8",
                "sha256:c577815dd00f1394203fc44eb979724b098f88264a9ef898ee45b8e5e9cf587f"
            ],
            "version": "==2.9.1"
        }
    }
}

рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ Pipfile.lock рдиреЗ extra_require dev рд╕рдВрдХреБрд▓ рдХреЛ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рд╣реИ?

рд╣рд╛рдБ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдмрдЧ/рд╕реАрдорд╛ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдЕрд▓рдЧ рдмрдЧ/рдореБрджреНрджрд╛ рджрд░реНрдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯреНрд░реИрдХрд░ рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЦреБрд▓ рдЧрдИ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЕрднреА рдЗрд╕рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддрд╛ред рдХреГрдкрдпрд╛ рдХрд┐рд╕реА рдПрдХ рдХреЛ рдЦреЛрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореМрдЬреВрджрд╛ рдореБрджреНрджреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░реЗрдВред рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рдж :)

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

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

@techalchemy рддреЛ рдореИрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдкрдиреА рджреЗрд╡ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдкрд┐рдкреЗрдирд╡ рдХрд╛ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ

рдореИрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛, рдФрд░ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ packages / dev-packages рднреЗрдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред {editable = true, extras = ["dev"], path = "."} рдХреЛ packages рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗред

рдЗрд╕ рдкрд┐рдкреЗрдирд╡-рд╕реЗрдЯрдЕрдк рдкреИрдХреЗрдЬ рдХреЛ рджреЗрдЦреЗрдВ

рдпрд╣ pipfile/lockfile рдХреЛ setup.py . рдореЗрдВ рд╕рд┐рдВрдХ рдХрд░рддрд╛ рд╣реИ

$ pipenv-setup sync

package e1839a8 is local, omitted in setup.py
setup.py successfully updated
23 packages from Pipfile.lock synced to setup.py

рдЖрдк рд╡рд┐рдХрд╛рд╕ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП $ pipenv-setup sync --dev рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛ $ pipenv-setup sync --pipfile рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдкрд╛рдЗрдкрдлрд╛рдЗрд▓ рдХреЛ рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

рдФрд░ $ pipenv-setup check рдХреЗрд╡рд▓ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

рдЙрди рд╕рднреА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджреЗрд╢

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

@ рдкреАрдЯрд░рдбреЗрдореЗ

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

@uranusjr @techalchemy рдКрдкрд░ рдХреА рдЪрд░реНрдЪрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд┐рдкреЗрдирд╡ рдХрд╛ рдХреБрдЫ рдЕрд▓рдЧ рджрд░реНрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЕрдиреБрд░рдХреНрд╖рдХ рд╕рд╣рдордд рд╣реИрдВ, рддреЛ рдореИрдВ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рдмрдорд┐рдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ pipenv-setup рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ

рдЖрдк Pipfile.lock рдХреЛ рдмрд┐рд▓реНрдЯрд┐рди json рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд╣рдореЗрд╢рд╛ рдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдкрдиреЗ non-dev рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЕрдкрдиреЗ setup.py install_requires рдХреЗ рд▓рд┐рдП рдирд┐рдХрд╛рд▓реЗрдВред
"default" рдХреБрдВрдЬреА рдореЗрдВ version рд╕рдВрдЦреНрдпрд╛рдУрдВ рдФрд░ markers рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЬ рдирд╛рдо рдХреЗ рдиреЗрд╕реНрдЯреЗрдб "рдбрд┐рдХреНрдЯреНрд╕" рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдЖрдкрдХреЛ рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рдЖрдпрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

@ рдХрд┐рд▓реЛ59 рдореИрдВрдиреЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдРрд╕рд╛ рдХрд░рддреЗ рджреЗрдЦрд╛ рд╣реИред рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯрд┐рдк рд╣реИ, Pipfile.lock рдХреЛ data_file рдХреЗ рд░реВрдк рдореЗрдВ setup.py рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ (рдпрд╛ рдЗрд╕реЗ MANIFEST.in рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ)ред рдФрд░ рдпрд╣ рдкрд┐рди рдХреА рдЧрдИ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд▓реЙрдХрдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд╣реИред рджреВрд╕рд░реА рдУрд░, pipfile, рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рддреБрдЪреНрдЫ рд╣реИ, рдпрджрд┐ рдЖрдк Pipfile рдореЗрдВ рд╕рд┐рдореЗрдВрдЯрд┐рдХ рд╡рд░реНрдЬрдирд┐рдВрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдПрдХ рд╣реА рдирд┐рд░реНрднрд░рддрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрдИ рд░реВрдкреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддреА рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж @Madoshakalaka рдЖрдкрдХрд╛ рдЯреВрд▓ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

рдореИрдВ рдЕрдиреНрдп рд╕рд╛рдерд┐рдпреЛрдВ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ Setup.py рдХреА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдкрд┐рдкрдлрд╛рдЗрд▓ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдореИрдиреНрдпреБрдЕрд▓ рд╢реНрд░рдо рдХреЗ рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдиреЗ рдпреЛрдЧреНрдп рддрд░реАрдХрд╛ рдПрдХ рдорд╣рд╛рди рд╕рдордп рдмрдЪрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реБрд╡рд┐рдзрд╛ рд╣реИред рд╕рд╛рде рд╣реА, рдЯрд╛рдЗрдкреЛ/рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХрд╛рд▓рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ setup.py рднреА рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕реНрдкрд░реНрд╢ рдерд╛: +1:

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

xi picture xi  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jerzyk picture jerzyk  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

marc-fez picture marc-fez  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

randName picture randName  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ipmb picture ipmb  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ