Pipenv: [рдкреНрд░рд╢реНрди] setup.py рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдПрдХреАрдХреГрдд рдХрд░реЗрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 7 рдлрд╝рд░ре░ 2017  ┬╖  38рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pypa/pipenv

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)]

рдореИрдВ рдкрд┐рдкрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

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

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

рдЕрдм, рдЗрд╕ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред

рдореИрдВ рдЗрд╕ рдХрдерди рд╕реЗ рд╢реБрд░реВ рдХрд░реВрдБрдЧрд╛ @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 #$ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рдирд╣реАрдВ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рдкрд░ рдФрд░ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рддрд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдЪрд╛рд░ рдпрд╛ рд░рд╛рдп рдирд╣реАрдВ рд╣реИ, рдХреНрд╖рдорд╛ рдХрд░реЗрдВред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рдХрд┐рд╕реА рддрд░рд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

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

рдЖрдкрдХреЛ рдЗрд╕реЗ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЖрдкрдХреЗ рд╡рд░реНрддрдорд╛рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдкрд┐рдкрдлрд╛рдЗрд▓ рдХреЛ рд▓реЛрдб рдХрд░реЗрдЧрд╛ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдПрдХ рдкрд╛рдЗрдк рд╕рдВрдЧрдд рд╕реВрдЪреА рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ред

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 рдХреЛ рдЗрдВрдЯрд░реИрдХреНрдЯ рдпрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЗрд╕реЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдЖ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдкрд╛рдЧрд▓ рдЧреЛрд▓рд┐рдпрд╛рдВ рд▓реЗ рд░рд╣рд╛ рд╣реВрдВ?

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

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

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

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

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

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

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

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