Pipenv: рдкрд┐рдкреЗрдирд╡ рдХреЗ рд╕рд╛рде рдкрд╣рд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг?

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

рдореИрдВ рд╣реИрд╢ рд╕рддреНрдпрд╛рдкрди рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реБрдП Pipfile.lock рдореЗрдВ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд╣рд┐рдпреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред 11.1.2 рд╕реЗ рдкрд╣рд▓реЗ рдЖрдк рдЗрд╕реЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдкреВрд░рд╛ рдХрд░ рд╕рдХрддреЗ рдереЗ:

pipenv lock -r > reqs.txt
pip wheel -r reqs.txt

_(#1417 рдЗрд╕ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдерд╛, рд▓реЗрдХрд┐рди рдЕрдиреНрдпрдерд╛ рдпрд╣ рдХрд╛рдо рдХрд░ рдЧрдпрд╛)_

11.1.2 рдореЗрдВ, рд╣реИрд╢ рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛-рд╢реИрд▓реА рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (afaik) рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд▓реЙрдХ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╣реИрд╢-рд╕рддреНрдпрд╛рдкрд┐рдд рдкрд╣рд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ/рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдВрдХрд▓рди/рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдСрдлрд╝рд▓рд╛рдЗрди рдЗрдВрд╕реНрдЯреЙрд▓ рдпрд╛ рдЗрдВрд╕реНрдЯреЙрд▓ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкреИрдХреЗрдЬ рдХрд░рдирд╛ рд╣реИред рдкрд╣рд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдлрд┐рд░ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдиреНрдпреВрдирддрдо рдкрд╛рдпрдерди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдХреНрдпрд╛ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ? рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреНрдпрд╛ рдЗрд╕ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдорд░реНрдерди рджреЗрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

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

рдмрд╕ рдЕрдЧрд░ рдХреЛрдИ рдпрд╣рд╛рдВ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рджреЗрдЦрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ ( pipenv рдЖрдВрддрд░рд┐рдХ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВ):

from pipenv.utils import convert_deps_to_pip
with open('Pipfile.lock') as f:
    deps = json.load(f)['default']
# remove local project which wouldn't have a hash
for k, v in list(deps.items()):
    if v.get('path') == '.':
        del(deps[k])
path_to_requirements_file_with_hashes = convert_deps_to_pip(deps)

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

рдЗрд╕ рд╕рдордп рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИ

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ pipenv-wheels рдЯреВрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░реАрди рдЕрд╡рд╕рд░ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

рдмрд╕ рдЕрдЧрд░ рдХреЛрдИ рдпрд╣рд╛рдВ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рджреЗрдЦрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ ( pipenv рдЖрдВрддрд░рд┐рдХ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВ):

from pipenv.utils import convert_deps_to_pip
with open('Pipfile.lock') as f:
    deps = json.load(f)['default']
# remove local project which wouldn't have a hash
for k, v in list(deps.items()):
    if v.get('path') == '.':
        del(deps[k])
path_to_requirements_file_with_hashes = convert_deps_to_pip(deps)
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

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

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

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

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

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

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