requirements.txt
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдВ рдпрд╣ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:
from pip.req import parse_requirements
requirements = [str(r.req) for r in
parse_requirements('requirements.txt', session=False)]
test_requirements = [str(r.req) for r in
parse_requirements('requirements-test.txt', session=False)]
рдореИрдВ рдкрд┐рдкрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?
рдЖрдкрдХреЛ рдЗрд╕реЗ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЖрдкрдХреЗ рд╡рд░реНрддрдорд╛рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдкрд┐рдкрдлрд╛рдЗрд▓ рдХреЛ рд▓реЛрдб рдХрд░реЗрдЧрд╛ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдПрдХ рдкрд╛рдЗрдк рд╕рдВрдЧрдд рд╕реВрдЪреА рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ред
from pipenv.project import Project
from pipenv.utils import convert_deps_to_pip
pfile = Project(chdir=False).parsed_pipfile
requirements = convert_deps_to_pip(pfile['packages'], r=False)
test_requirements = convert_deps_to_pip(pfile['dev-packages'], r=False)
рдпрджрд┐ рдЖрдЧреЗ рдЖрдкрдХреЗ рдХреЛрдИ рднреА рдкреНрд░рд╢реНрди рд╣реЛрдВ, рддреЛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ :)
рдЙрдкрд░реЛрдХреНрдд рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реИред рдореИрдВрдиреЗ setup.py
рдХреЗ рд╕рд╛рде рдореБрджреНрджреЛрдВ рдореЗрдВ рднрд╛рдЧ рд▓рд┐рдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдореЗрдВ setup.py install
(рдпрд╛ рдХреБрдЫ рдФрд░) рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд┐рдкреЗрдирд╡ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╛ рддреЛ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкрд┐рдкреЗрдирд╡ рдХреЛ рд╡рд┐рдХреНрд░реЗрддрд╛ рдмрдирд╛рдирд╛ рд╣реИ, рдЬреЛ рдЖрджрд░реНрд╢ рд╕реЗ рдХрдо рд▓рдЧрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ from pipenv...
рдЖрдпрд╛рдд рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд┐рдкреЗрдирд╡ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП setup.py рдХреЛ рд╣реИрдХ рдХрд░рдирд╛, рдЬреЛ рд▓рдЧрддрд╛ рд╣реИ рдЧрд▓рддред рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдпрд╛ рдЗрд╕рд╕реЗ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ?
рдХреНрдпрд╛ рд╣рдореЗрдВ Python рд╕рдореБрджрд╛рдп (PyPA, рдЖрджрд┐) рдореЗрдВ рджреВрд╕рд░реЛрдВ рдХреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ Python рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рдЯреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ Pipenv рдХреЛ рдЖрд╢реАрд░реНрд╡рд╛рдж рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП ~ рдкрд░реЗрд╢рд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореИрдВ
рдХреНрдпрд╛ рдпрд╣ pipenv
рдХреЛ setup_requires рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ install_requires
рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИред
рдпрд╣ рдордд рдХрд░реЛред
@kennethreitz "рдЗрд╕" рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм setup.py, @nateprewitt рд╕рдорд╛рдзрд╛рди рдпрд╛ рдкрд┐рдЫрд▓реЗ рджреЛ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рд╣реИ?
рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЙрдиреНрд╣реЗрдВ pipenv рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рдЪреВрдВрдХрд┐ рдкрд┐рдкреЗрдирд╡ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЖрдкрдХреЗ setup.py рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред рдХреЗрдиреЗрде рдЬрд┐рд╕ рдЪреАрдЬ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд░рд╣рд╛ рд╣реИ, рд╡рд╣ setup.py рдореЗрдВ pipenv рдЖрдпрд╛рдд рдХрд░ рд░рд╣реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ cli рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
17 рдЕрдХреНрдЯреВрдмрд░, 2017 рдХреЛ рд╕реБрдмрд╣ 9:37 рдмрдЬреЗ, рдЗрджреНрджрди рдЕрд╣рд╣рд░реЛрдирд╕рди рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:
рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЙрдиреНрд╣реЗрдВ pipenv рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЗрд╕ рдереНрд░реЗрдб рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реА рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВред
рддреЛ рдореИрдВ setup.py рдореЗрдВ @nateprewitt - рдХреЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?
@iddan : рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрдВрдХрд╛рд▓ (https://github.com/elgertam/cookiecutter-pypackage/blob/master/%7B%7Bcookiecutter.project_slug%7D) рдореЗрдВ рдХреЗрд╡рд▓ рдкрд┐рдкреЗрдирд╡ рдХреЗ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмреЗрдЪрдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдкрд┐рдкреЗрдирд╡ рдмреВрдЯрд╕реНрдЯреНрд░реИрдкрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИред %7D/setup.py)ред рдЕрдм рддрдХ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрд╡рд╕рд░ рд╣реИрдВ рдЬрд╣рд╛рдВ рдореИрдВ setup.py
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВред
рдореИрдВ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рд╕реЗрдЯрдЕрдк.рдкреА рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рд╕реАрдПрд▓рдЖрдИ рдирд╣реАрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рдХреНрдпреЛрдВ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореИрдВ рдЬреЛ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдЙрд╕рд╕реЗ рдореИрдВ рдЬрд┐рд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рдпрд╣рд╛рдВ @nateprewitt рдХреА рдкреЛрд╕реНрдЯ рд╕реЗ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛) рдХрд╛рдлреА рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣реИрдХ рдЕрдм рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬрдм pip
рдореЗрдВ рдкрд┐рдкрдлрд╛рдЗрд▓ рдкреНрд░рд╛рд░реВрдк рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЖрдВрддрд░рд┐рдХ рд╣реЛрдВред
@iddan , рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╣ рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ рдкрд┐рдкрдлрд╛рдЗрд▓ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдПрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдЯреАрдПрдХреНрд╕рдЯреА рд╢реИрд▓реА рдкреНрд░рд╛рд░реВрдк рдЬреЛ рдкрд╛рдЗрдк рдкрдврд╝реЗрдЧрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрдиреЗрде рдиреЗ рдореВрд▓ рдкреЛрд╕реНрдЯ рд╕реЗ рдХреБрдЫ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ред
рдкрд┐рдкреЗрдирд╡ рдПрдХ рдкрд░реНрдпрд╛рд╡рд░рдг рдкреНрд░рдмрдВрдзрди рдФрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ, рди рдХрд┐ рд╡рд┐рддрд░рдг рдХреЗ рд▓рд┐рдП рдЬреИрд╕реЗ setup.pyред рд╣рдо рдЕрддреНрдпрдзрд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдПрдХ рдкрд┐рдкрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╕рдВрднрд╡рддрдГ рд╕реНрдерд╛рдкрдирд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП pipenv.org рд╕реЗ рд▓рд┐рдВрдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕реЗ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдВ рдЬреИрд╕реЗ рдЖрдк рдкрд╛рдЗрдк рдХреЗ рд╕рд╛рде рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╣рд░ рдмрд╛рд░ рдЬрдм рд╡реЗ рдПрдХ рдирдпрд╛ рдкрд╛рдпрдерди рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдкрд╛рдЗрдк рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред
рдореИрдВ рдЗрд╕реЗ рдмрдЦреВрдмреА рд╕рдордЭрддрд╛ рд╣реВрдВред рдЬреЛ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреИрдХреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдореЗрдВ pipenv рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ
@nateprewitt , рдЕрдЧрд░ рд╣рдо рдПрдХ рдкреИрдХреЗрдЬ рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ (рд╕рд╛рдорд╛рдиреНрдп рд╕рд╛рдзрдиреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, pip
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ), рдХреНрдпрд╛ рд╣рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рд╕реВрдЪреА рдХреА рдПрдХ рдкреНрд░рддрд┐ setup.py
рдпрд╛ requirements.txt
рдореЗрдВ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП ? рдореИрдВ рдЕрдкрдиреЗ рдкрд┐рдкрдлрд╛рдЗрд▓ рдХреЛ рд╕рддреНрдп рдХреЗ рдПрдХрд▓ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ред
рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдЙрддреНрддрд░ рдореЗрдВ рдХреЛрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ setup.py
рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред
рдЬрдм рддрдХ рдореИрдВ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдЧрд▓рдд рдирд╣реАрдВ рд╣реВрдБ, https://github.com/kennethreitz/pipenv/issues/209#issuecomment -278185133 рдореЗрдВ рдХреЛрдб рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдпрджрд┐ рдЖрдк рдПрдХ рдкрд╣рд┐рдпрд╛ (= рдмрд╛рдЗрдирд░реА рдбрд┐рд╕реНрдЯ) рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдирд╣реАрдВ рдЖрдк sdist (= рд╕реНрд░реЛрдд рдЬрд┐рд▓рд╛) рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред
рдкрд╣рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, setup.py
рдХреЛ рдкреИрдХреЗрдЬ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдмрд▓реНрдХрд┐ рдмрд┐рд▓реНрдб-рдЯрд╛рдЗрдо рдкрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдПрдХрддреНрд░рд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдкрд╣рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, setup.py
рдХреЛ рдЙрд╕ рдорд╢реАрди рдореЗрдВ рдХрднреА рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
sdist рдХреЗ рд╕рд╛рде, setup.py
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдорд╢реАрди рдкрд░ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП pipenv
рдХреЛ рд╡рд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрд░реЗ рд╣рд╛рдБред @tuukkamustonen , рдореЗрд░рд╛ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдПрдХ sdist рд╣реИред рдЪреВрдВрдХрд┐ рдореИрдВ $#$1 pip install
#$ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреИрдХреЗрдЬ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ pipenv
рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ setup.py
рдХреЗ рдмрд╛рд╣рд░ рдЕрдкрдирд╛ install_requires
рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдлрдВрд╕ рдЧрдпрд╛ рд╣реВрдВ setup.py
(рдпрд╛рдиреА рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдмрд┐рд▓реНрдб рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ)?
рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдХреЗрдиреЗрде рдФрд░ рдЕрдиреНрдп рдЕрдиреБрд░рдХреНрд╖рдХ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо Pipenv
рдХреЛ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреЗрдВ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо pytest
, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреИрдХреЗрдЬ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ Pipenv
рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ pip
рд╕реНрд╡рдпрдВ, рдпрд╛рдиреА pip
рдЬрдм рдкрд╛рдпрдерди рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдЬрдм virtualenv
рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреЗрдиреЗрде рдХрд╛ рдпрд╣реА рдорддрд▓рдм рдерд╛ рдЬрдм рдЙрд╕рдиреЗ рдХрд╣рд╛, "рдРрд╕рд╛ рдордд рдХрд░реЛред"
рдЙрд╕ рдиреЗ рдХрд╣рд╛, @isobit рдиреЗ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐рдд рдХрд┐рдпрд╛ рдХрд┐ Pipfile
рд╕рддреНрдп рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕реНрд░реЛрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдкрд┐рдкрдлрд╛рдЗрд▓ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рджреЛ рд╕рдореНрдореЛрд╣рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ (рдФрд░ рдЕрдиреНрдп рднреА рд╣реИрдВ): рдкрд╣рд▓рд╛, рдПрдХ рд╕реАрдЖрдИ/рд╕реАрдбреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЬреЛ рдмрд┐рд▓реНрдб рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдкрдлрд╛рдЗрд▓ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдордЬрдмреВрдд рд╣реИред рдФрд░ рджреВрд╕рд░рд╛, рдПрдХ рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛ рдЖрдБрдЦ рдмрдВрдж рдХрд░рдХреЗ рдПрдХ рдкрд┐рдкрдлрд╛рдЗрд▓-рдЖрдзрд╛рд░рд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ python setup.py install
рдЙрд╕рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рддреЛ рд╡рд╣ рдирд┐рд░рд╛рд╢ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рди рддреЛ рдкрд┐рдкреЗрдирд╡ рдпрд╛ рдкрд┐рдкрдлрд╛рдЗрд▓-рдЬрд╛рдЧрд░реВрдХ рдкрд╛рдЗрдк рдЕрднреА рддрдХ рдорд╛рдирдХ рдкрд╛рдпрдерди рдЙрдкрдХрд░рдг рд╣реИрдВ, рдФрд░ рдкрд┐рдкреЗрдирд╡ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд┐рдкрдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
1) рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ Pipenv
рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЕрднреА рднреА рдЕрдкрдиреЗ Pipenv
рдкрд░ рдЕрдкрдиреЗ setup.py
рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ Pipenv
рдЖрдкрдХреЗ рдкрд╛рдпрдерди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИред рд╕реАрдзреЗ рддреМрд░ рдкрд░, рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛ рдХреЛ Pipenv
рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ virtualenv
рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ setup.py
рдХреЗ рд╕рд╛рде рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
2) рдЕрднреА рднреА setup.py requirements.txt
рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк рдЕрдкрдиреЗ Pipfile
рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдордп-рд╕рдордп рдкрд░ рдЬреЗрдирд░реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ pip
рдФрд░ setuptools
рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдЧрдд рд░рд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдФрд░ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ requirements.txt
рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд░рдЦрд░рдЦрд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХрд╛ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдмрджрд▓рд╛рд╡ CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп requirements.txt
рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ред
3) рдкрд┐рдкреЗрдирд╡ рдХреЗ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╡реЗрдВрдбрд░рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ from _vendor.pipenv.project import Project...
рдХреЗ рдЕрдВрджрд░ setup.py
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрд▓ рдХрд░реЗрдВред рдЗрд╕рдХрд╛ рдПрдХ рд░реВрдкрд╛рдВрддрд░ рдХреЗрд╡рд▓ рд╡рд┐рдХреНрд░реЗрддрд╛рдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рд╡реИрд╢реНрд╡рд┐рдХ рдЖрдпрд╛рдд рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
4) рдХреБрдЫ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдЬреЛ рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдорд╛рд░реНрдЯ рдирд╣реАрдВ рд╣реВрдВред
рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ (3) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рджреЗрдЦреЗрдВ https://github.com/kennethreitz/pipenv/issues/209#issuecomment-300550425) рдЬрдм рддрдХ рдХрд┐ рдкрд┐рдкрдлрд╛рдЗрд▓ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдХ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдореЗрд░реА рдХреЛрдИ рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реЛрдЧреА рд╕реАрдзреЗ рдкрд┐рдкреЗрдирд╡ рдХреЛрдб рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкрд┐рдкреЗрдирд╡ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдкрд┐рдкрдлрд╛рдЗрд▓ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдПрдХ рдкрд┐рдкрдлрд╛рдЗрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реА рд╣реЛред
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдпрд╣рд╛рдВ рдкрдврд╝реА рдЧрдИ рдмрд╛рддреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВрдиреЗ рдХреБрдЫ рдЧрд▓рдд рдХрд╣рд╛ рдпрд╛ рдХреБрдЫ рдЧрдВрднреАрд░ рдХрд╣рд╛, рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ @nateprewitt рдмрддрд╛рдПрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдореБрджреНрджрд╛ requirements.txt
рдХреЗ рдореВрд▓ рджреБрд░реБрдкрдпреЛрдЧ (рдЖрдИрдПрдордУ) рд╕реЗ рд╢реБрд░реВ рд╣реБрдЖ рд╣реИред рдпрд╣ pipenv
рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдЕрд▓рдЧ рд╣реИред
рдореИрдВ рдбреЛрдирд╛рд▓реНрдб рд╕реНрдЯрдлреНрдЯ рдХреЗ рдЗрд╕ рдЕрджреНрднреБрдд рд▓реЗрдЦ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, setup.py рдмрдирд╛рдо рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ.txt:
https://caremad.io/posts/2013/07/setup-vs-requirement/
рдЯреАрдПрд▓; рдбреАрдЖрд░ (рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП): setup.py
рдХрд╛ install_requires
рдПрдХ рдкреИрдХреЗрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ (рдирд┐рд░реНрднрд░рддрд╛) рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред requirements.txt
(рдЬрд┐рд╕реЗ рдпрд╣рд╛рдВ Pipfile
/ Pipfile.lock
рдХреЙрдореНрдмреЛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреМрди рд╕реЗ рд╕рдЯреАрдХ рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрд╡рд╢реНрдпрдХ рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП setup.py
рд╕реЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ред
install_requires
рдХреЛ requirements.txt
рд╕реЗ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдирд╛ рдкреАрдЫреЗ рдХреА рдУрд░ рдЬрд╛рдиреЗ рдЬреИрд╕рд╛ рд╣реИред
setup.py
рдХрд╛ install_requires
=/= requirements.txt
(рдпрд╛ Pipfile
/ Pipfile.lock
)ред
Pipfile
(рдпрд╛ рдмрд▓реНрдХрд┐ Pipfile.lock
) рдРрдк рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЬреЛрдВ рдХреА рд╕рдЪреНрдЪрд╛рдИ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕реНрд░реЛрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
setup.py
рдХрд╛ install_requires
рдПрдХ рд╡реИрдз Pipfile.lock
рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреБрдХреНрдд рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣реАрдВ рд╕реЗ рдШрд░реНрд╖рдг рдЖ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рдореБрдЭреЗ рд╡рд╣ рдЙрддреНрддрд░ рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИ, рд╡рд┐рдиреНрд╕реЗрдВрдЯ, рдФрд░ рдореИрдВ Pipfile.lock
рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг (рдФрд░ рдмреЗрд╣рддрд░) рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реЛрдиреЗ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдВ requirements.txt
ред
рдХреБрдЫ рдорд╣реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд┐рдкреЗрдирд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореЗрд░реЗ Pipfile
рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ install_requires
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Pipfile
рдореЗрдВ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИред рдЕрдЧрд░ рдореБрдЭреЗ numpy
рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореИрдВ pipenv install numpy
рдФрд░ рдореЗрд░реЗ рдкрд┐рдкрдлрд╛рдЗрд▓ рдХреЗ [packages]
рд╕рдореВрд╣ рдореЗрдВ рдПрдХ рдирдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬрд╛рддреА рд╣реИ: numpy = "*"
ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ requirements.txt
рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдЕрд▓рдЧ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ pip freeze > requirements.txt
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рдерд╛ред
рд╢рд╛рдпрдж рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЕрдЬреАрдм рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдкрд┐рдкреЗрдирд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рдЕрдирд╛рдЬ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ (рдореИрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдЕрдВрджрд░ .venv/
рдореЗрдВ рдЕрдкрдирд╛ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рднреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдПрдХ рджреБрд╖реНрдЯ рдкрд╛рдЗрдереЛрдирд┐рд╕реНрдЯрд╛ рд╣реВрдВ), рдЬрд┐рд╕рдореЗрдВ рдЕрдЧрд░ рдореИрдВ setup.py
рдФрд░ Pipfile
рдХреЗ рдмреАрдЪ рдЕрд▓рдЧрд╛рд╡ рдХреА рджреАрд╡рд╛рд░ рд░рдЦрдиреЗ рдХреЗ рдкрд╛рдпрдерди рд╕рдореБрджрд╛рдп рдХреЗ рд╕рдореНрдореЗрд▓рди рдХрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ | Pipfile.lock
| requirements.txt
ред
рдореИрдВ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдЦреЛ рд░рд╣рд╛ рд╣реВрдБ, @vphilippon?
рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, @vphilipponред рд╢рд╛рдпрдж рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреАрдЫреЗ рдХреА рдУрд░ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ рдЙрд▓реНрдЯрд╛ рд╣реИ- рдПрдХ рддрд░рд╣ рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд┐рдкрдлрд╛рдЗрд▓ рдореЗрдВ install_requires
рд╕реЗ рдПрдмреНрд╕рдЯреНрд░реИрдХреНрдЯ рдбрд┐рдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреИрд╕реЗ рдбреЛрдирд╛рд▓реНрдб рдиреЗ -e . рдореЗрдВ requirements.txt
-e .
рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред requirements.txt
ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдереА (#339), рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╣реАрдВ рдирд╣реАрдВ рдЧрдпрд╛ред
рдХреНрдпрд╛ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд┐рдкрдлрд╛рдЗрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдореИрдВрдиреЗ рдЕрднреА рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдз рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд┐рдкрдлрд╛рдЗрд▓ рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ "e1839a8" = {path = ".", editable = true, extras=["socks"]}
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдкрд┐рдкрдлрд╛рдЗрд▓ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреЛрдИ рдЕрдиреНрдп рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрд╕реНрд╡реАрдХрд░рдг: рдореЗрд░реА рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд▓рд┐рдм рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рд╣реИред рдореБрдЭреЗ рдХреБрдЫ рдмрд┐рдВрджреБ рдпрд╛рдж рдЖ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдЧрд▓рдд рд╣реЛрдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВ!
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдиреЗ рдореБрдЭреЗ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕рд┐рд░ рдЦреБрдЬрд▓рд╛рдпрд╛ред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдкрд░ рдХреБрдЫ рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдЕрдм, рдЗрд╕ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
рдореИрдВ рдЗрд╕ рдХрдерди рд╕реЗ рд╢реБрд░реВ рдХрд░реВрдБрдЧрд╛ @elgertam :
[...] Pipfile рдХрд╛ рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ install_requires рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИ рдЬреЛ рдкрд┐рдкрдлрд╛рдЗрд▓ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд░ рдореБрдЭреЗ numpy рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдореИрдВ pipenv numpy рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдореЗрд░реЗ рдкрд┐рдкрдлрд╛рдЗрд▓ рдХреЗ [рдкреИрдХреЗрдЬ] рд╕рдореВрд╣ рдореЗрдВ рдПрдХ рдирдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬрд╛рддреА рд╣реИ [...]
рдЖрдкрдиреЗ рдЕрдкрдиреЗ рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ numpy
рдЬреЛрдбрд╝рд╛, рдЖрдкрдиреЗ рдЕрдкрдиреЗ рдРрдк рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ numpy
рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ред
рд╡реЗ рджреЛ рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рд╣реИрдВред рдкрдврд╝рддреЗ рд░рд╣рд┐рдП, рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдореЗрд░рд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред
рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИред
рд╣реИрд░рд╛рдиреА рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрддрдирд╛ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ:
pip install stuff
-> pip freeze > requirements.txt
-> requirements.txt рд╕реЗ requirements.txt
install_requires
рдлрд╝реАрдб рдХрд░реЗрдВpipenv install stuff
-> Pipfile
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ -> $#$ Pipfile
$#$ рдХреЗ рд╕рд╛рде install_requires
рдХреЛ рдЦрд┐рд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИредinstall_requires
рдореЗрдВ рд╕рд╛рдорд╛рди рдЬреЛрдбрд╝реЗрдВ -> pipenv install
-> рдкрд░реНрдпрд╛рд╡рд░рдг рдФрд░ Pipfile.lock
рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВредрдФрд░ рдЙрд╕ рдЗрдЪреНрдЫрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ Pipfile
рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдирд╛ рдРрдк рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
requests
Pipfile
рдЬреИрд╕рд╛ рдХреБрдЫ @isobit рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдпрд╛, рдПрдХ рдЙрджрд╛рд╣рд░рдг:
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
[dev-packages]
pytest = ">=2.8.0"
tox = "*"
[packages]
"-e ." = "*"
рдЖрдкрдХрд╛ Pipfile
рдЖрдкрдХреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рди рдХрд┐ рдХрд┐рд╕реА рдкреИрдХреЗрдЬ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ, рдКрдкрд░ Pipfile
рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рд╕рдВрдкрд╛рджрди рдпреЛрдЧреНрдп рдореЛрдб рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдкреИрдХреЗрдЬ рд╣реИред
рдпрд╣ рдереЛрдбрд╝рд╛ "рдмреЗрдХрд╛рд░" рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрднреА рдпрд╣ рд╕рдм рдПрдХ рд╣реА рдкреИрдХреЗрдЬ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рдЕрдкрдирд╛ рдРрдк рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди requests[security]
рдХреЗ рд╕рд╛рде, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЗ рдРрдк рд╕реЗ рд╕рдЦреНрдд рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдк pipenv install requests[security]
рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░:
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
[dev-packages]
pytest = ">=2.8.0"
tox = "*"
[packages]
"-e ." = "*"
requests = { extras = ['security'] }
рдФрд░ рд╡реЙрдпрд▓рд╛, рдпрд╣рд╛рдВ рдЖрдкрдХреА рдЕрдореВрд░реНрдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдФрд░ рдЖрдкрдХреА рдареЛрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдпрджрд┐ рдЖрдк gunicorn
рдпрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдХреБрдЫ рднреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╣реА рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдРрдк рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИред
рдореИрдВ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдЦреЛ рд░рд╣рд╛ рд╣реВрдБ, @vphilippon? Pipfile рдХрд╛ [рдкреИрдХреЗрдЬ] рднреА install_requires рдпрд╛ test_require рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╡рд╢ рдХреНрдпреЛрдВ рд╣реИ?
рдЕрдЧрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдмрд╕ рджреВрд╕рд░реА рддрд░рдл рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрдк рдЕрдкрдиреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ install_requires
рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдЖрдк Pipfile
рдореЗрдВ рдкреИрдХреЗрдЬ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЖрдкрдХреЛ рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП Pipfile.lock
рдХреЗ рд╕рд╛рде рдкрд░реНрдпрд╛рд╡рд░рдг рдорд┐рд▓рддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдФрд░ рд╕рдореНрдорд╛рди рдХрд░реЗрдЧрд╛) рдкреИрдХреЗрдЬ рдирд┐рд░реНрднрд░рддрд╛)ред
test_require
рдХреЗ рд▓рд┐рдП, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдБ рдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рд╕рдм рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред IIRC, рдЗрд╕рдХреА рдПрдХ setuptools
рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рд╣рдо рддрд░реНрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрдореВрд░реНрдд рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ, рдФрд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ pipenv
рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП pipenv install --dev
#$ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рдирд╣реАрдВ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рдкрд░ рдФрд░ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рддрд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдЪрд╛рд░ рдпрд╛ рд░рд╛рдп рдирд╣реАрдВ рд╣реИ, рдХреНрд╖рдорд╛ рдХрд░реЗрдВред
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рдХрд┐рд╕реА рддрд░рд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
@vphilippon рдЖрдкрдиреЗ рдЗрд╕реЗ рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕рдордЭрд╛рдпрд╛, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рджрд┐рд▓рд╛рдпрд╛ рд╣реИред
TL; DR: setup.py
рдореЗрдВ рдЕрдореВрд░реНрдд, рдмрд┐рд▓реНрдХреБрд▓ рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ, рдлрд┐рд░ Pipfile
рдФрд░ Pipfile.lock
рдореЗрдВ рд╕рдВрджрд░реНрдн (рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛) рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдирджрд╛рд░ "-e ." = "*"
рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред
https://github.com/kennethreitz/pipenv/issues/209#issuecomment -337409290 рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рд╣рдо рдЕрдкрдиреЗ рдРрдк рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рддреИрдирд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╡рд╛рддрд╛рд╡рд░рдг рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред
рдореЗрд░рд╛ рдорддрд▓рдм рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдПрдХ _library_ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ install_requires
рдмрд╣реБрдд рдвреАрд▓рд╛ рд╣реЛ (= рд╕рдЯреАрдХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдпрдХрд╛рд░реА рдирд╣реАрдВ)ред рд╣рд╛рдВред рд▓реЗрдХрд┐рди рдЬрдм рд╣рдо рдПрдХ рд╡реЗрдм рдРрдк (рдпрд╛ рдХреЛрдИ рдРрдк) рдмрдирд╛ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡рд░ рдпрд╛ рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рдкрд░ рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╢рд╛рдпрдж рдирд┐рд╢реНрдЪрд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╣рдо install_requires
рдореЗрдВ рд╕рдЯреАрдХ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рднреА рдЯреНрд░рд╛рдВрдЬрд┐рдЯрд┐рд╡ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд▓реЙрдХ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЯреНрд░рд╛рдВрдЬрд┐рдЯрд┐рд╡ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдХрд╛ рдПрдХ рдЕрд▓рдЧ (рдирдпрд╛) рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЖрдкрдХреЗ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЛ рддреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред
(рд╕рдХрд░реНрдордХ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рд╕рдЯреАрдХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ - рд░рд╛рд╕реНрддрд╛ рдмрд╣реБрдд рдмреЛрдЭрд┐рд▓ рд╣реИред)
рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ requirements.txt
рд╕реНрдЯрд╛рдЗрд▓ рд▓реЙрдХрдлрд╛рдЗрд▓ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬреЛ рд╕рдХрд░реНрдордХ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рд╕рдЯреАрдХ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ)ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ pipenv pipenv lock -r
(рдЬреИрд╕реЗ pipenv lock --no-dev -r
) рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕реЗ requirements.txt
(рдЬреЛ рддрдм рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ) рдХреЛ рддреИрдпрд╛рд░ рдХрд░ рд╕рдХреЗрдВ install_requires
рдореЗрдВ рдкрдврд╝реЗрдВ)?
рдореИрдВ рдбреЛрдирд╛рд▓реНрдб рд╕реНрдЯрдл рдХреЗ рд▓реЗрдЦ рдХреЛ рдЙрджреНрдзреГрдд рдХрд░реВрдВрдЧрд╛:
рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЖрдо рддреМрд░ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЕрдХреНрд╕рд░ рдХрдИ рдмрд╛рд░ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рдЬрдЯрд┐рд▓ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ, рдЬрд┐рд╕реЗ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЖрдорддреМрд░ рдкрд░ рдХреЛрдИ рдирд╛рдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рди рд╣реА рдХреЛрдИ рдЕрдиреНрдп рдкреИрдХреЗрдЬрд┐рдВрдЧ рд╕рдВрдмрдВрдзреА рдореЗрдЯрд╛рдбреЗрдЯрд╛ред рдпрд╣ рдПрдХ рдкрд╛рдЗрдк рдЖрд╡рд╢реНрдпрдХрддрд╛ рдлрд╝рд╛рдЗрд▓ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИред
рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ: рдРрдк рдкреИрдХреЗрдЬ рдирд╣реАрдВ рд╣реИред рдРрдк рдкрд░реНрдпрд╛рд╡рд░рдг рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдареЛрд╕ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╕реНрдерд╛рдкрд┐рдд рд╣реИред рдПрдХ рдРрдк рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ requirements.txt
(рдпрд╛ Pipfile
/ Pipfile.lock
) рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рдПрдХ рдкреИрдХреЗрдЬ install_requires
рджреНрд╡рд╛рд░рд╛ред
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдкрд┐рди рдХреА рдЧрдИ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдкреВрд░рд╛ рд╕реЗрдЯ (рд╕рдХрд░реНрдордХ рдПрдХ рд╕рд╣рд┐рдд) рдРрдк рдХреЗ рд▓рд┐рдП requirements.txt
рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдкреИрдХреЗрдЬ рдХреЗ setup.py
рдореЗрдВ рдирд╣реАрдВред рдпрд╣ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдРрдк рдХреЛ рддреИрдирд╛рдд рдХрд░рдирд╛ pip install myapp==1.0.0
рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ pip install -r requirements.txt
(рдпрд╛ pipenv install
рдХреЗ рд╕рд╛рде Pipfile.lock
) рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ requirements.txt
рдореЗрдВ myapp==1.0.0
рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдиреНрдп рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдФрд░ рд╕рдХрд░реНрдордХ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдкрд┐рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдереЛрдбрд╝реА рджреВрд░ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдРрд╕реЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рддреИрдирд╛рдд "рдРрдк" рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдРрдк рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рднреА рдкреИрдХреЗрдЬ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдзрд╛рд░рдгрд╛ рдХрд┐ "рдкреИрдХреЗрдЬ рдРрдк рдирд╣реАрдВ рд╣реИ" рдореЗрд░реЗ рдЪреЗрд╣рд░реЗ рдкрд░ ЁЯШД рдкрд░ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдореБрдЭреЗ рдПрдХ рдордЬрдмреВрдд рднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ Pipenv/Pipfile/Pipfile.lock рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИред
рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ Pipfile.lock
рд╕реЗ setup.py
рдХреЗ install_requires
рддрдХ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрддрд░ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ: рдЗрд╕рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред
@maintainers рдореИрдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдЖрдкрдХрд╛ рдЗрдирдкреБрдЯ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдк рдпрд╣ рд╕рдм рдХреИрд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВред рдореИрдВ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдкреНрд░рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдХреИрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрдХреА рдЬрдЧрд╣ рдкрд░ рдмрд╛рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред
@vphilippon рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ рд╢рдмреНрджрд╛рд╡рд▓реА рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдВрддрддрдГ, рд╣рдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рди рдХреА рдЧрдИ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдЪрд╛рд╣рддреЗ рд╣реИрдВред рддреЛ рдПрдХ requirements.txt
рдкрд┐рди рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде (рдпрд╛ рдРрд╕реА рдШреЛрд╖рд┐рдд рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рд╡рд╛рд▓рд╛ рдкреИрдХреЗрдЬ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛)ред рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕реА рдлрд╛рдЗрд▓ рдХреИрд╕реЗ рддреИрдпрд╛рд░ рдХреА рдЬрд╛рдП?
pip-compile
( рдкрд╛рдЗрдк-рдЯреВрд▓реНрд╕ рдХреЗ ) рдХреЗ рд╕рд╛рде, рдореИрдВ рдРрд╕реЗ requirements.txt
рдХреЛ requirements.in
$ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдЧреИрд░-рджреЗрд╡ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реЛрдВрдЧреА рдЬрд┐рдирдХреА рдореЗрд░реЗ рдРрдк рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рд╣реА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ - рдХреНрдпрд╛ рдЖрдкрдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╣рд╛рде рд╕реЗ рдПрдХ рдкрд┐рди рдХреА рдЧрдИ рдирд┐рд░реНрднрд░рддрд╛ requirements.txt
рдмрдирд╛рдП рд░рдЦрдиреА рдЪрд╛рд╣рд┐рдП (рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА setup.py
рдореЗрдВ рд╣реИ, рдЙрд╕реЗ рдереЛрдбрд╝рд╛-рдереЛрдбрд╝рд╛ рджреЛрд╣рд░рд╛рддреЗ рд╣реБрдП), рдЗрд╕рдХреЗ рд▓рд┐рдП рднреА рд╕рдХрд░реНрдордХ рдирд┐рд░реНрднрд░рддрд╛? рдпрд╣ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛...
рдЕрдЧрд░ рд╡рд╣рд╛рдБ pipenv lock --no-dev -r
рд╣реЛрддрд╛, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
@tuukkamustonen рднреНрд░рдо рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ install_requires
рдмрдирд╛рдо requirements.txt
/ Pipfile
/ Pipfile.lock
рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░ рд░рд╣рд╛ рдерд╛ред
рддреЛ рдПрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБред рдкрд┐рди рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде txt (рдпрд╛ рдРрд╕реА рдШреЛрд╖рд┐рдд рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рд╡рд╛рд▓рд╛ рдкреИрдХреЗрдЬ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛)ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдВрддрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдХрд╣рд╛, рдпрд╣рд╛рдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВред рдЖрдЗрдП рдЕрднреА рдХреЗ рд▓рд┐рдП рдЕрд╕рд╣рдордд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реИрдВред рдПрдХ рд╕рд╛рдЗрдб рдиреЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореБрджреНрджреЗ рдкрд░ рд╢реЛрд░ рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛ рд╡рд┐рд╖рдп рдкрд░ рдЪрд▓рддреЗ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдпрд╣реА рд╡рд╣ рд╕рд╛рдорд╛рди рд╣реИ рдЬрд┐рд╕реЗ рд╕рдореБрджрд╛рдп рдореЗрдВ рдЕрдзрд┐рдХ рдЪрд░реНрдЪрд╛ рдФрд░ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЖрдИрдПрдордУред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ pipenv pipenv lock -r . рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
рд▓реЗрдХрд┐рди рдЕрдВрддрддрдГ, рд╣рдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рди рдХреА рдЧрдИ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдЪрд╛рд╣рддреЗ рд╣реИрдВред [...] рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕реА рдлрд╛рдЗрд▓ рдХреЛ рдХреИрд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдП? [...] рдкрд┐рдк-рдХрдВрдкрд╛рдЗрд▓ (рдкрд╛рдЗрдк-рдЯреВрд▓реНрд╕ рдХреЗ) рдХреЗ рд╕рд╛рде, рдореИрдВ рдРрд╕реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдХрдВрдкрд╛рдЗрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдЖрд╣, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд╣реА рд╣реИрдВ: рдореБрдЭреЗ pipenv install --not-dev-stuff
рдХрд╣рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ (рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рдерд╛ рдХрд┐ рдПрдХ рдЕрдЬреАрдм рдерд╛), рдФрд░ рдПрдХ рдЧреИрд░-рджреЗрд╡ рд╡рд╛рддрд╛рд╡рд░рдг рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ 2 рдЕрд▓рдЧ рд╕реЗрдХреНрд╢рди рд╣реЛрдиреЗ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдореБрдЭреЗ рдЕрдм рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдпрд╣ setup.py
рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдирдП рдореБрджреНрджреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдЧрд▓рддреА рдХреАред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЗрд╡ рдкреИрдХреЗрдЬ рдХреЗ рдмрд┐рдирд╛ Pipfile.lock
рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди , рдПрдХ рдирдП рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ, рдореМрдЬреВрджрд╛ Pipfile
/ Pipfile.lock
рдХреЗ рд╕рд╛рде, pipenv install
рдХрд░ рд░рд╣рд╛ рдерд╛ рджреЗрд╡ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ @tuukkamustonen рдХреЗ рдмрд┐рдВрджреБ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЧрд▓рдд рдерд╛ рдЬрдм рдпрд╣ рдмрддрд╛рддреЗ рд╣реБрдП рдХрд┐ "рдареЗрд╕ рд╡рд╛рддрд╛рд╡рд░рдг" рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдерд╛, рдореЗрд░реА рдЧрд▓рддреАред
рдУрд╣, рдпрд╣ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдерд╛ред
рдЬрдм рддрдХ рдХрд┐ рдореИрдВ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдЧрд▓рдд рдирд╣реАрдВ рд╣реВрдВ, #209 (рдЯрд┐рдкреНрдкрдгреА) рдореЗрдВ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдпрджрд┐ рдЖрдк рдПрдХ рдкрд╣рд┐рдпрд╛ (= рдмрд╛рдЗрдирд░реА рдбрд┐рд╕реНрдЯ) рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк sdist (=source dist) рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
@tuukkamustonen рдпрд╣ рдХреЗрд╡рд▓ рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЗрд╕реЗ рдЕрдкрдиреЗ setup.py рдореЗрдВ рд╢рд╛рдорд┐рд▓ рди рдХрд░реЗрдВред рдХрдИ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ pipenv lock -r
рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рдПрдХ рдЕрд░реНрдз-рд╣реИрдХреА рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг packages
рдФрд░ dev-packages
рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ (3) (# 209 (рдЯрд┐рдкреНрдкрдгреА) рджреЗрдЦреЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрдм рддрдХ рдХрд┐ рдкрд┐рдкрдлрд╛рдЗрд▓ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдХ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдореЗрд░реА рдХреЛрдИ рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реАрдзреЗ рдкрд┐рдкреЗрдирд╡ рдХреЛрдб рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдкрд┐рдкреЗрдирд╡ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рд╣реЛрдиреЗ рдХрд╛ рдорддрд▓рдм рд▓рдЧрддрд╛ рд╣реИред рдПрдХ рдкрд┐рдкрдлрд╛рдЗрд▓ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг, рдФрд░ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдПрдХ рдкрд┐рдкрдлрд╛рдЗрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реАред
@elgertam рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрд╛рдж рд╕реЗ рдЖрдкрдХреА рд░рд╛рдп рдмрд╣ рдЧрдИ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛ рдХрд┐ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде pipenv
рдХреЛ рдмрдВрдбрд▓ рдХрд░рдирд╛ рд╢рд╛рдпрдж рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреЛрдИ рднреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкрде рдкреИрдЪрд┐рдВрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ "рдЕрдкрдиреЗ рдЬреЛрдЦрд┐рдо рдкрд░ рдЙрдкрдпреЛрдЧ" рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯ рджреВрдВрдЧрд╛ред
рдЕрдиреБрд░рдХреНрд╖рдХ рдореИрдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдЖрдкрдХрд╛ рдЗрдирдкреБрдЯ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдк рдпрд╣ рд╕рдм рдХреИрд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВред рдореИрдВ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдкреНрд░рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдХреИрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрдХреА рдЬрдЧрд╣ рдкрд░ рдмрд╛рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рджреГрд╖реНрдЯрд┐ рдХреЗ рдЕрдиреБрд░реВрдк рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣реИрдВред рдпрд╣ рд╕рдм рдЗрддрдиреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж @vphilippon!
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЗ рдЕрдиреНрдп рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рднрд╛рдЧреЛрдВ рдХреЛ #942 рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдпрд╣рд╛рдВ рдЕрдЪреНрдЫреЗ рд╣реИрдВред рдЕрдЧрд░ рдореИрдВрдиреЗ рдХреБрдЫ рднреА рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдкрд┐рдВрдЧ рдХрд░реЗрдВред
рдореИрдВрдиреЗ https://github.com/pypa/pipfile/issues/98 рдореЗрдВ рдПрдХ рдареЛрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдкрд╛рд▓рди рдХрд┐рдпрд╛ рдЬреЛ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдпреЛрдЧреНрдп рдФрд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдкрд╛рдпрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдбреАрдПрдХреНрд╕ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╡рд┐рдЪрд╛рд░?
import json, jmespath
install_requires = []
with open('Pipfile.lock') as f:
context = json.loads(f.read())
install_requires.extend(map(
lambda n, v : n + v,
jmespath.search('default | keys(@)', context),
jmespath.search('default.*.version', context),
))
setup(
name='foobar',
packages=find_packages(),
setup_requires=['jmespath'],
install_requires=install_requires,
)
@cornfeedhobo рдореЗрд░реА рд╕рдордЭ рдпрд╣ рд╣реИ рдХрд┐ setup_requires рдкрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рдЦреЗрд▓рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЗрд╕ рдирдореВрдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдХреИрд╕реЗ рджреЗрдВрдЧреЗ?
рдирдореВрдирд╛ рддрдм рддрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рдЖрдк рдкрд╣рд▓реЗ jmespath рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рдХреНрдпреЛрдВрдХрд┐ setup.py рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рдпрдерди рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред setup_requires
рддрд░реНрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рднреА рд╣рд╛рд╕рд┐рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрддрдирд╛ рджреВрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ jmespath рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИред
рдореИрдВрдиреЗ рдПрдХ рдЕрдиреНрдп рдЕрдВрдХ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдПрдЯреАрдПрдо рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддрд╛ (рдкреВрд░реЗ рдореБрджреНрджреЗ рдЯреНрд░реИрдХрд░ рдореЗрдВ рдЗрддрдиреА рд╕рд╛рд░реА рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЪрд░реНрдЪрд╛рдПрдВ рд╣реИрдВ рдХрд┐ рдЕрдм рдХреБрдЫ рднреА рдвреВрдВрдврдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ), рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрд╣реВрдВрдЧрд╛: рдХреГрдкрдпрд╛ рдХреБрдЫ рднреА рди рдмрдирд╛рдПрдВ- рдЕрдВрджрд░ setup.py рдореЗрдВ рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдЙрдЪрд┐рдд рдлрд╝реЙрд▓рдмреИрдХ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдХреЛрдИ рд╕рдЯреАрдХ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред рдЙрдкрд░реЛрдХреНрдд setup.py
рд╡рд╛рд▓рд╛ рдкреИрдХреЗрдЬ рдкрд┐рдкреЗрдирд╡ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдореЗрдВ jmespath рд╕реНрдерд╛рдкрд┐рдд рд╣реИ; рдкрд┐рдкреЗрдирд╡ рдПрдХ рд╕реНрд╡рдЪреНрдЫ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ setup.py egg_info
рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ jmespath рдЖрдпрд╛рдд рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣реЗрдЧрд╛ред рдпрд╣ рдмреБрд░рд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред рдХреГрдкрдпрд╛ рдЗрд╕рд╕реЗ рдмрдЪреЗрдВред
@epot рдореБрдЭреЗ рдЗрд╕рдХреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдереА
@uranusjr рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╕реБрд╡рд┐рдЪрд╛рд░рд┐рдд рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЕрднреА рдЗрд╕ рдкреВрд░реЗ рдорд╛рдорд▓реЗ рдХреА рдЫрд╛рдирдмреАрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдФрд░ рдЕрдзрд┐рдХ рд╢рд░реНрдорд┐рдВрджрдЧреА рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВ pypa/pipfile#98 . рдкрд░ рднреА рдирдЬрд╝рд░ рд░рдЦ рд░рд╣рд╛ рд╣реВрдБ
рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдореЗрдВ jmespath
рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ?
import json
install_requires = []
tests_require = []
with open('Pipfile.lock') as fd:
lock_data = json.load(fd)
install_requires = [
package_name + package_data['version']
for package_name, package_data in lock_data['default'].items()
]
tests_require = [
package_name + package_data['version']
for package_name, package_data in lock_data['develop'].items()
]
@mschwager рдЖрдк рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкрд┐рди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдореБрд╢реНрдХрд┐рд▓ рд╕рдордп рд╣реЛрдЧрд╛ред #1921 ==
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рддреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред
рдореЗрд░реА рдХреНрд╖рдорд╛ рдпрд╛рдЪрдирд╛, рд▓реЗрдХрд┐рди рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП setup.py
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпрд╛ рдЙрдХреНрдд рдкреИрдХреЗрдЬ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП requirements.txt
/ Pipfile
рдХреЗ рдмреАрдЪ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ? рдЖрд╡рд╢реНрдпрдХ libs setup.py
рдФрд░ requirements.txt
/ Pipfile
рдХреЗ рдмреАрдЪ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣реИ рдирд╛? рдЗрд╕рд▓рд┐рдП Pipfile
рдХреЛ рдПрдХреАрдХреГрдд рди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред setup.py
рдкрд╣рд▓реЗ рд╣реА requirements.txt
рдкрд╛рд░реНрд╕ рдХрд░ рдЪреБрдХрд╛ рд╣реИред рдпрд╣ Pipfile
рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?
requirements.txt
рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдФрд░ рдХреЗрд╡рд▓ Pipfile
. рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдирд╣реАрдВ, рдЙрдирдХреЗ рд╕рдорд╛рди рд╣реЛрдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХрд╛рдлреА рдЖрдореВрд▓рдЪреВрд▓ рдзрд╛рд░рдгрд╛ рд╣реИ, рдФрд░ рд╕рдореБрджрд╛рдп рдореЗрдВ рдХрдИ рд▓реЛрдЧ рдЗрд╕рд╕реЗ рднрд┐рдиреНрди рднреАрдЦ рдорд╛рдБрдЧреЗрдВрдЧреЗред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕реЗ рдХрд╛рд░рдг рд╣реИрдВ рдХрд┐ рд╡реЗ _can_ рд╕рдорд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдкрд┐рдкреЗрдирд╡ рдЗрд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЕрднреА рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ, рдФрд░ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред рдЖрдк рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкреАрдИрдкреА 518 рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдмрд┐рд▓реНрдб-рдЯрд╛рдЗрдо рд╕рдорд░реНрдерди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдкреА 10.0 рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдХрд╣рд╛ рдерд╛, рдкрд┐рдкрдлрд╛рдЗрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП setup.py рдХреЛ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЖрдкрдХреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрддреНрдкрд░ рд╣реВрдВ :)
рд╕рдордЭреЗрдВ рдХрд┐ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЛ setup.py рдХреЗ рдЕрдореВрд░реНрдд рдХрд╛рдо рдкрд╕рдВрдж рд╣реИрдВ, рдлрд┐рд░ рднреА рдпрд╣ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИ? рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЧреЛрд▓рд╛рдВрдЧ рдХреЗрд╡рд▓ рдареЛрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рд╕реЗ рдЧреНрд░рд╕реНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рдВрдЯреЗ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрд╡рд╢реНрдпрдХ lib рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ? рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ setup.py рдЗрдВрдЯрд░рдЧреЗрд╢рди рдЕрднреА рджрд╛рдпрд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рджреЗрдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ рдХрд┐ рдкрд┐рдкреЗрдирд╡ рдХрд╛ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рд░реЛрдбрдореИрдк рдХреНрдпрд╛ рд╣реИред рдпрд╣ рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдкрд╛рдпрдерди рдореЗрдВ рдЯреВрд▓ рдкрд░ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ setup.py рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд setup.py рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдкрд┐рдкреЗрдирд╡ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рд╣реЛрдиреЗ рдХрд╛ рдХрдорд╛рд▓ рд╣реИред рдмрд╕ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ setup.py рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рджрд╛рдпрд░рд╛ рдмрдврд╝рд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ?
рдпрджрд┐ pipenv npm рдЖрджрд┐ рдХреА рддрд░рд╣ рд╣реИ, рддреЛ рдЙрдирдХрд╛ package.json рджреВрд░рд╕реНрде рд╕реНрдерд╛рдкрдирд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ рдХрд┐ pipenv setup.py рдХреЛ рдЗрдВрдЯрд░реИрдХреНрдЯ рдпрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЗрд╕реЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдЖ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдкрд╛рдЧрд▓ рдЧреЛрд▓рд┐рдпрд╛рдВ рд▓реЗ рд░рд╣рд╛ рд╣реВрдВ?
рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдХрд┐ рдпрд╣ рдЕрд╡рд╢реНрдп рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЗрд╕реЗ рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдирддреЗ рд╣реБрдП, рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рд╣рдо рдХреБрдЫ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рдкрд┐рдкрдлрд╛рдЗрд▓-рдЖрдзрд╛рд░рд┐рдд рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрд╕реНрд╡реАрдХрд░рдг: рдореЗрд░реА рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд▓рд┐рдм рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рд╣реИред рдореБрдЭреЗ рдХреБрдЫ рдмрд┐рдВрджреБ рдпрд╛рдж рдЖ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдЧрд▓рдд рд╣реЛрдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВ!
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдиреЗ рдореБрдЭреЗ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕рд┐рд░ рдЦреБрдЬрд▓рд╛рдпрд╛ред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдкрд░ рдХреБрдЫ рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдЕрдм, рдЗрд╕ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
рдореИрдВ рдЗрд╕ рдХрдерди рд╕реЗ рд╢реБрд░реВ рдХрд░реВрдБрдЧрд╛ @elgertam :
рдЖрдкрдиреЗ рдЕрдкрдиреЗ рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ
numpy
рдЬреЛрдбрд╝рд╛, рдЖрдкрдиреЗ рдЕрдкрдиреЗ рдРрдк рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВnumpy
рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛редрд╡реЗ рджреЛ рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рд╣реИрдВред рдкрдврд╝рддреЗ рд░рд╣рд┐рдП, рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдореЗрд░рд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред
рд╣реИрд░рд╛рдиреА рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрддрдирд╛ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ:
pip install stuff
->pip freeze > requirements.txt
-> requirements.txt рд╕реЗrequirements.txt
install_requires
рдлрд╝реАрдб рдХрд░реЗрдВpipenv install stuff
->Pipfile
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ -> $#$Pipfile
$#$ рдХреЗ рд╕рд╛рдеinstall_requires
рдХреЛ рдЦрд┐рд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИредinstall_requires
рдореЗрдВ рд╕рд╛рдорд╛рди рдЬреЛрдбрд╝реЗрдВ ->pipenv install
-> рдкрд░реНрдпрд╛рд╡рд░рдг рдФрд░Pipfile.lock
рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВредрдФрд░ рдЙрд╕ рдЗрдЪреНрдЫрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ
Pipfile
рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдирд╛ рдРрдк рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВредrequests
Pipfile
рдЬреИрд╕рд╛ рдХреБрдЫ @isobit рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИредрдпрд╛, рдПрдХ рдЙрджрд╛рд╣рд░рдг:
рдЖрдкрдХрд╛
Pipfile
рдЖрдкрдХреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рди рдХрд┐ рдХрд┐рд╕реА рдкреИрдХреЗрдЬ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ, рдКрдкрд░Pipfile
рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рд╕рдВрдкрд╛рджрди рдпреЛрдЧреНрдп рдореЛрдб рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдкреИрдХреЗрдЬ рд╣реИредрдпрд╣ рдереЛрдбрд╝рд╛ "рдмреЗрдХрд╛рд░" рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрднреА рдпрд╣ рд╕рдм рдПрдХ рд╣реА рдкреИрдХреЗрдЬ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рдЕрдкрдирд╛ рдРрдк рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди
requests[security]
рдХреЗ рд╕рд╛рде, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЗ рдРрдк рд╕реЗ рд╕рдЦреНрдд рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдкpipenv install requests[security]
рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░:рдФрд░ рд╡реЙрдпрд▓рд╛, рдпрд╣рд╛рдВ рдЖрдкрдХреА рдЕрдореВрд░реНрдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдФрд░ рдЖрдкрдХреА рдареЛрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдпрджрд┐ рдЖрдк
gunicorn
рдпрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдХреБрдЫ рднреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╣реА рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдРрдк рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИредрдЕрдЧрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдмрд╕ рджреВрд╕рд░реА рддрд░рдл рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрдк рдЕрдкрдиреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ
install_requires
рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдЖрдкPipfile
рдореЗрдВ рдкреИрдХреЗрдЬ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЖрдкрдХреЛ рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдПPipfile.lock
рдХреЗ рд╕рд╛рде рдкрд░реНрдпрд╛рд╡рд░рдг рдорд┐рд▓рддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдФрд░ рд╕рдореНрдорд╛рди рдХрд░реЗрдЧрд╛) рдкреИрдХреЗрдЬ рдирд┐рд░реНрднрд░рддрд╛)редtest_require
рдХреЗ рд▓рд┐рдП, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдБ рдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рд╕рдм рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред IIRC, рдЗрд╕рдХреА рдПрдХsetuptools
рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рд╣рдо рддрд░реНрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрдореВрд░реНрдд рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ, рдФрд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐pipenv
рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдПpipenv install --dev
#$ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рдирд╣реАрдВ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рдкрд░ рдФрд░ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рддрд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдЪрд╛рд░ рдпрд╛ рд░рд╛рдп рдирд╣реАрдВ рд╣реИ, рдХреНрд╖рдорд╛ рдХрд░реЗрдВредрдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рдХрд┐рд╕реА рддрд░рд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред