Pipenv: ๋ชฉํ‘œ: ๋ชจ๋“  ์„ค์น˜ ๋ช…๋ น ํ›„ ์ž ๊ธˆ ํŒŒ์ผ ์ผ๊ด€์„ฑ ๋ณด์žฅ

์— ๋งŒ๋“  2017๋…„ 12์›” 31์ผ  ยท  50์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: pypa/pipenv

https://github.com/pypa/pipenv/issues/1137 ์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด pipenv ๋Š” ํ˜„์žฌ [packages] ์™€ [dev-packages] ์‚ฌ์ด์˜ ์š”๊ตฌ ์‚ฌํ•ญ ์ถฉ๋Œ์„ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•˜๋Š” ํ”Œ๋žซ requirements.txt ์„ ์ƒ์„ฑํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ข…์†์„ฑ์ด ์ถฉ๋Œํ•  ๋•Œ ์ผ๋ฐ˜์ ์ธ ์ด์ƒํ•จ์„ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

pipenv install ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹(์„ค์น˜๋ฅผ ์‹คํ–‰ํ•œ ๋‹ค์Œ ์ž ๊ธˆ ํŒŒ์ผ ์—…๋ฐ์ดํŠธ)์€ ๋กœ์ปฌ ํ™˜๊ฒฝ์ด ์ž ๊ธˆ ํŒŒ์ผ๊ณผ ๋™๊ธฐํ™”๋˜์ง€ ์•Š๋Š” ๊ฒƒ๋„ ๋น„๊ต์  ์‰ฝ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ ์š”์ฒญ์ด ์ด๋ฏธ ์„ค์น˜๋œ ํŒจํ‚ค์ง€๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ, ๊ทธ๋Ÿฌ๋ฉด ๋กœ์ปฌ๋กœ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์ง€๋งŒ ์ž ๊ธˆ ํŒŒ์ผ์€ ๊ตฌ์„ฑ๋œ ํŒจํ‚ค์ง€ ์ธ๋ฑ์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๊ฐœ๋ณ„ ๊ธฐ๋Šฅ ์š”์ฒญ์„ ๋‹ค๋ฃจ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ์ž ๊ธˆ ํŒŒ์ผ์„ ๋จผ์ € ์ˆ˜์ •ํ•œ ๋‹ค์Œ ์—…๋ฐ์ดํŠธ๋œ ์ž ๊ธˆ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ ์„ค์น˜ ๋‹จ๊ณ„๋ฅผ ์ง„ํ–‰ํ•˜๋„๋ก ์„ค์น˜ ๋ช…๋ น์„ ๊ตฌ์„ฑํ•˜์—ฌ ์ž ๊ธˆ ํŒŒ์ผ๊ณผ ๋กœ์ปฌ ํ™˜๊ฒฝ ๊ฐ„์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋ชฉํ‘œ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. (์ด ์ž‘์—…์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„์— ๋Œ€ํ•œ ๋ชฉํ‘œ ETA๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์€ ๋‹จ์ง€ ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ๊ฐ™์€ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€๊ณ  ์žˆ๊ณ  ๊ทธ ๋ฐฉํ–ฅ์— ํŽธ์•ˆํ•˜๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

์ด๊ฒƒ์˜ ํ•ต์‹ฌ ์ธก๋ฉด์€ pipenv install , pipenv uninstall , pipenv lock ๋ฐ pipenv update ๊ฐ„์˜ ์ฑ…์ž„ ๋ถ„ํ• ์„ ๋ช…ํ™•ํžˆ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•„์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จ๋˜๋Š” ๊ฒฝ์šฐ ์ƒˆ ํ•˜์œ„ ๋ช…๋ น).

์ œ์•ˆ๋œ ํ•˜์œ„ ๋‹จ๊ณ„:

  • [X]๋Š” ์ถ”๊ฐ€ ํ•  pipenv sync ๋ถ€์†ํ•˜๋Š” ํ˜„์žฌ ํ™˜๊ฒฝ (์œ ์‚ฌํ•œ ๋กœํฌ ํŒŒ์ผ๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์„ ๋ณด์žฅ pip-sync ์—์„œ pip-tools ). (10.0.0์šฉ @kennethreitz ์— ์˜ํ•ด ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ pipenv sync ๋Š” ์ž ๊ธด ํŒจํ‚ค์ง€์˜ ๋ฒ„์ „์ด ์ž ๊ธˆ ํŒŒ์ผ๊ณผ ์ผ์น˜ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐ˜๋ฉด pipenv clean ๋Š” ์ž ๊ธˆ ํŒŒ์ผ์— ์—†๋Š” ํŒจํ‚ค์ง€๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. pip-sync , ๋‹ค๋ฅธ ๋ช…๋ น์— ์•”์‹œ์  ๋™๊ธฐํ™”๋ฅผ ํฌํ•จํ•ด๋„ ๊ฐ€์ƒ ํ™˜๊ฒฝ์—์„œ ์•„๋ฌด ๊ฒƒ๋„ ์˜ˆ๊ธฐ์น˜ ์•Š๊ฒŒ ์‚ญ์ œ๋˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • [x] ์ธ์ˆ˜ ์—†์ด pipenv install ๋Œ€ํ•œ ํ˜„์žฌ ๋™์ž‘์„ ์œ ์ง€ํ•˜์ง€๋งŒ ์ƒˆ๋กœ์šด ํ™˜๊ฒฝ์„ ์„ค์ •ํ•  ๋•Œ pipenv sync ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜๋„๋ก ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋Ÿฌ๋ฉด pipenv install ๊ฐ€ ์ฃผ๋กœ ์„ค์น˜๋œ ๊ตฌ์„ฑ ์š”์†Œ ๋ณ€๊ฒฝ )
  • [x] [packages] ๋ฐ [dev-packages] ๊ฐ€ ํ•ญ์ƒ ์„œ๋กœ ์ผ์น˜ํ•˜๋„๋ก pipenv lock ์—…๋ฐ์ดํŠธ(#1137์— ๋Œ€ํ•œ ํ•ด์ƒ๋„)
  • [x] pipenv update ๋ฅผ pipenv lock && pipenv sync ์™€ ๋™์ผํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค(pipenv ์—…๋ฐ์ดํŠธ๋Š” ๋Œ€์‹  ์™„์ „ํžˆ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ์ด์ „ ๋™์ž‘์€ ์‹ค์ œ๋กœ ํ˜„์žฌ pipenv sync && pipenv clean ๊ฒƒ๊ณผ ๋น„์Šทํ–ˆ์Šต๋‹ˆ๋‹ค).
  • [x] Pipfile ์—์„œ ์—ฌ์ „ํžˆ ์ƒˆ๋กœ์šด Pipfile.lock ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ƒˆ๋กœ์šด pipenv lock --keep-outdated ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜์ง€๋งŒ Pipfile ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ถฉ์กฑ์‹œํ‚ค๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋งŒ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • [x] pipenv install <packages> ๋ฅผ "Pipfile์—์„œ ํ•ญ๋ชฉ ์ถ”๊ฐ€ ๋˜๋Š” ์—…๋ฐ์ดํŠธ" ๋‹ค์Œ์— pipenv lock && pipenv sync (#1486์—์„œ ๊ตฌํ˜„๋จ).
  • [x] pipenv lock ์ž‘์—…์œผ๋กœ ์ „๋‹ฌ๋˜๋Š” pipenv ์„ค์น˜์— --keep-outdated ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • [x] "Pipfile์—์„œ ํ•ด๋‹น ํŒจํ‚ค์ง€ ํ•ญ๋ชฉ ์ œ๊ฑฐ(์žˆ๋Š” ๊ฒฝ์šฐ)"์™€ ์˜๋ฏธ์ƒ ๋™์ผํ•œ ์ƒˆ๋กœ์šด pipenv install --selective-upgrade <packages> ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ณ  pipenv lock --keep-outdated ๋ฅผ ์‹คํ–‰ํ•œ ๋‹ค์Œ pipenv install --keep-outdated <packages> (์ด๋Š” https://github.com/pypa/pipenv/issues/966์— ๋Œ€ํ•œ ์ง€์›์„ ์ œ๊ณตํ•˜๋Š” ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„). ํŒจํ‚ค์ง€ ์ด๋ฆ„๋งŒ ์ง€์ •ํ•˜๋ฉด Pipfile ์˜ ๊ธฐ์กด ๋ฒ„์ „ ์ œ์•ฝ ์กฐ๊ฑด์ด ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ง€์ •๋œ ๋ฒ„์ „ ์ œ์•ฝ ์กฐ๊ฑด์ด ๊ธฐ์กด ์ œ์•ฝ ์กฐ๊ฑด์„ ๋ฎ์–ด์”๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ํ˜„์žฌ ํ™˜๊ฒฝ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ pip 9+์˜ pip install --upgrade --upgrade-strategy=only-if-needed <packages> ์™€ ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค( Pipfile.lock ๋„ ์—…๋ฐ์ดํŠธ๋œ๋‹ค๋Š” ์ ๋งŒ ์ œ์™ธ).

์ด ํ•˜์œ„ ๋‹จ๊ณ„ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜๋ ค๋Š” ์‚ฌ๋žŒ์ด ์žˆ์œผ๋ฉด ์•„๋ž˜์— ์˜๊ฒฌ์„ ์ž‘์„ฑํ•˜์—ฌ ์ž‘์—… ์ค‘์ด๋ผ๊ณ  ๋งํ•œ ๋‹ค์Œ(๋…ธ๋ ฅ์˜ ์ค‘๋ณต์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด) ์ด ๋ฌธ์ œ์™€ ์—ฐ๊ฒฐ๋˜๋Š” PR์„ ์ œ์ถœํ•˜์‹ญ์‹œ์˜ค. (์•ž์— ๋‚˜์—ด๋œ ๋‹จ๊ณ„๋Š” ์ดํ›„ ๋‹จ๊ณ„๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ์™„๋ฃŒํ•ด์•ผ ํ•จ)

์—ด๋ฆฐ ์งˆ๋ฌธ:

  • ์—†์Œ

ํ•ด๊ฒฐ๋œ ์งˆ๋ฌธ(์ ์–ด๋„ ๊ฐ€๊นŒ์šด ์žฅ๋ž˜์—):

  • pipenv lock ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ๊ฒƒ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋„๋ก ๊ณ„์† ๊ธฐ๋ณธ ์„ค์ •๋˜๋ฉฐ pipenv lock --keep-outdated ๋Š” Pipfile ๋ณ€๊ฒฝ(์ถ”๊ฐ€, ์ œ๊ฑฐ ๋ฐ ๋ฒ„์ „ ์ œ์•ฝ ์กฐ๊ฑด ๋ณ€๊ฒฝ)
  • pipenv lock --skip-lock ๋Š” ์˜ค๋Š˜๋‚ ๊ณผ ๊ฐ™์ด ๊ณ„์† ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(์ž ๊ธˆ ํŒŒ์ผ๊ณผ ๋กœ์ปฌ ํ™˜๊ฒฝ์ด ๋™๊ธฐํ™”๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•˜๋”๋ผ๋„: pipenv sync && pipenv clean ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์‹œ ๋™๊ธฐํ™”).
  • pipenv install ๋ฐ pipenv install <package> ๋Š” ๊ณ„์†ํ•ด์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ „์ฒด pipenv lock ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ pipenv install --keep-outdated ๋Š” ์„ค์น˜ ์š”์ฒญ์„ ์ถฉ์กฑ์‹œํ‚ค๋Š” ๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๋ณ€๊ฒฝ๋งŒ ์š”์ฒญํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • pipenv install <package> ๋Š” ์ƒˆ๋กœ์šด --selective-upgrade ์˜ต์…˜์— ๋Œ€ํ•ด์„œ๋„ ๋ช…๋ น์ค„์— ์•„๋ฌด๊ฒƒ๋„ ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ Pipfile ์˜ ๊ธฐ์กด ๋ฒ„์ „ ์ œ์•ฝ ์กฐ๊ฑด์„ ๊ณ„์† ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • pipenv uninstall <package> ๋Š” ์ง€์ •๋œ ํŒจํ‚ค์ง€๋ฅผ ์ œ๊ฑฐํ•˜๋ฏ€๋กœ ๋กœ์ปฌ ํ™˜๊ฒฝ์— ๋” ์ด์ƒ ํ•„์š”ํ•œ ์ข…์†์„ฑ์ด ๋‚จ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. pipenv lock && pipenv sync && pipenv clean ํ•˜๋ฉด ์ง€์›Œ์ง‘๋‹ˆ๋‹ค.

์ฐธ๊ณ : ์—ฌ๊ธฐ์˜ ์›๋ž˜ ์ œ์•ˆ์€ ์ž ๊ธˆ ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ๋•Œ [dev-packages] ๋ฐ [packages] ๊ฐ€ ๋™๊ธฐํ™”๋œ ์ƒํƒœ๋กœ ์œ ์ง€๋˜๊ณ  ์ฒ˜์Œ ๋ช‡ ๊ฐœ์˜ ๊ฒŒ์‹œ๋ฌผ์ด ์ด๋ฅผ ๋ฐ˜์˜ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ œ์•ˆ์€ ๋Œ€์‹  https://github.com/pypa/pipenv/issues/1255#issuecomment -354585775์—์„œ ์ฒ˜์Œ ์–ธ๊ธ‰๋œ ์ž ๊ธˆ ํŒŒ์ผ ๊ธฐ๋ฐ˜ ๋Œ€์นญ ์—…๋ฐ์ดํŠธ ์ œ์•ˆ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

Future Discussion Type

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

--selective-upgrade ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  50 ๋Œ“๊ธ€

์—ฌ๊ธฐ์„œ ์ž ์žฌ์ ์ธ ๊ตฌํ˜„ ๋ฌธ์ œ๋ฅผ ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. pip-tools ํ˜„์žฌ ์ œ์•ฝ ์กฐ๊ฑด ํŒŒ์ผ์„ ์ง€์›ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๋ ค๋ฉด ๋จผ์ € ํ•ด๋‹น ์ง€์›์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ pip๊ฐ€ ์‹ค์ œ ์„ค์น˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„ค์น˜ ์‹œ๊ฐ„ ์ถฉ๋Œ ๊ฐ์ง€ ๋Š” ์ƒ๊ด€์—†์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜ ์‹œ๊ฐ„ ์ž์ฒด๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ž ๊ธˆ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ „์ฒด ์ „์ด ์ข…์†์„ฑ์„ ํ•ด๊ฒฐํ•  ๋•Œ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/pypa/pipenv/issues/966#issuecomment -339707418์—์„œ ๊ด€๋ จ ์—†๋Š” ์ข…์†์„ฑ์„ ์—…๋ฐ์ดํŠธํ•˜์ง€ ๋ง๋ผ๋Š” @vphilippon ์ œ์•ˆ์— ๋”ฐ๋ผ ๋Œ€๋ถ€๋ถ„ LocalRequirementsRepository ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/taion/pipf/blob/1feee35a2e4480bc7e5b53bfab17587d37bdf9dd/pipf/pipfile.py#L175 -L185์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

https://github.com/pypa/pipfile/issues/100 ๋„ Pipfile.lock ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๊ทธ๋ฃน์— ๋Œ€ํ•ด ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ์—ฌ๋Ÿฌ ์ข…์†์„ฑ ์ง‘ํ•ฉ์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

@taion ์šฐ๋ฆฌ๋Š” ๊ฐœ๋ฐœ ์ข…์†์„ฑ์„ ๋ณด์ง€ ์•Š๊ณ  ๋ฐฐํฌ ์ข…์†์„ฑ์„ ๋‹ค์‹œ ์ž ๊ทธ๋Š” ๋„๊ตฌ๋ฅผ ์ง€์›ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Pipfile.lock ๋ฅผ ํ‰๋ฉด ํ‘œํ˜„์œผ๋กœ ์ „ํ™˜ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ, ์ด๋Š” [dev-packages] ์„น์…˜์ด ์ตœ์‹ ์ด ์•„๋‹ ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด ์ด ๋ฌธ์ œ์˜ ๋ชฉ์ ์ž…๋‹ˆ๋‹ค. [dev-packages] ์„น์…˜์ด ์—…๋ฐ์ดํŠธ๋  ๋•Œ ํ•ด๋‹น ์„น์…˜์ด ๋ฐฐํฌ ํŒจํ‚ค์ง€ ์„น์…˜.

ํ•˜์ง€๋งŒ ์„ค์น˜ ์‹œ๊ฐ„์ด ์•„๋‹Œ ์ž ๊ธˆ ์‹œ๊ฐ„์— ์ถฉ๋Œ์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ›Œ๋ฅญํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์‚ฌ์šฉ์ž ๊ด€์ ์—์„œ๋Š” https://github.com/pypa/pipenv/issues/966 ๋ฐ ๊ธฐํƒ€ ๊ด€๋ จ(๋‹ซํžŒ) ๋ฌธ์ œ์˜ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

์ตœ์•…์˜ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ์ž ๊ธˆ ํŒŒ์ผ์—์„œ ํ•ด๊ฒฐ๋œ ์ „์ด ์ข…์†์„ฑ์„ ์บ์‹œํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. Yarn๊ณผ npm์€ ์ด๋ฏธ ๊ทธ๋ ‡๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž dep์— ๋Œ€ํ•ด PyPI๋ฅผ ๋ˆ„๋ฅด์ง€ ์•Š๊ณ  ๋ชจ๋“  prod dep๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ์ง€ ์•Š๋Š” ํ•œ ๋™๊ธฐํ™”๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ํ˜๋Ÿฌ๊ฐ€๋„๋ก ๋‚ด๋ฒ„๋ ค ๋‘๋Š” ์ ๊ทน์ ์ธ ์ด์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ํŒจํ„ด์— ๋งŽ์€ ์‹œ๊ฐ„์„ ๋ณด๋‚ธ ์‚ฌ๋žŒ์œผ๋กœ์„œ ๊ธฐ์กด ๋„๊ตฌ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์—์„œ ์ด๋Ÿฌํ•œ ํŽธ์ฐจ์˜ ๋Œ€๋ถ€๋ถ„์€ ๊ณ ํ†ต์„ ์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ npm์€ ์‹ค์ œ๋กœ ํ”„๋กœ๋•์…˜ ์ข…์†์„ฑ ์—…๋ฐ์ดํŠธ๋งŒ ์ง€์›ํ•˜๊ณ  ๊ฐœ๋ฐœ ์ข…์†์„ฑ์€ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์‹ค์ œ๋กœ ํ”Œ๋žซ ์ž ๊ธˆ ํŒŒ์ผ(์บ์‹œ๋œ ํ•ด์ƒ๋„ ํฌํ•จ)์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๋ง๋ถ™์ž…๋‹ˆ๋‹ค.

ํฅ๋ฏธ๋กญ๊ฒŒ๋„ Yarn์€ ๋Œ€๋Ÿ‰ "์—…๋ฐ์ดํŠธ ์ข…์†์„ฑ" ํ•˜์œ„ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ(๋Œ€ํ™”ํ˜• ๋ฒ„์ „์€ prod ๋ฐ dev deps๋ฅผ ๋ถ„ํ• ํ•˜์ง€๋งŒ) ์ด์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•˜๋Š” ์‚ฌ๋žŒ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ ์•„๋งˆ๋„ npm - ๊ธฐ๋ณธ์ ์œผ๋กœ ์ข…์†์„ฑ์— ๋Œ€ํ•ด ์บ๋Ÿฟ ๋ฒ”์œ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•˜๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ SemVer๋ฅผ ๋”ฐ๋ฅด๋Š” ๋ฐ ์ถฉ๋ถ„ํžˆ ๋Šฅ์ˆ™ํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ dev dep ์ถฉ๋Œ๋กœ ์ธํ•œ ๋ฌธ์ œ๋ฅผ ๊ฑฐ์˜ ์ผ์œผํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Python ์ƒํƒœ๊ณ„๋Š” ๊ทธ๋‹ค์ง€ ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@taion ๋ช…์‹œ์  pipenv lock ์ด๋ฏธ [packages] ๋ฐ [dev-packages] ๋ชจ๋‘ ์™„์ „ํžˆ ํ•ด๊ฒฐํ•˜๋ฏ€๋กœ ์ด ๊ฒฝ์šฐ ๊ตฌ์„ฑ ๋“œ๋ฆฌํ”„ํŠธ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ข…์†์„ฑ ์ถฉ๋Œ์„ ๊ฐ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ๋ฐ”๋žŒ์งํ•ฉ๋‹ˆ๋‹ค).

pipenv install package ๋ฐ pipenv install --dev package ๋ถˆ์ผ์น˜๋ฅผ ๊ฐ์ง€(๋ฐ ํ•ด๊ฒฐ)ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€์นญ ์†”๋ฃจ์…˜์ด ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์ด ์ข‹์€ ๋ฐฉ๋ฒ•์ด ๋  ๊ฒƒ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋น„๋Œ€์นญ ์†”๋ฃจ์…˜์ด ๊ตฌํ˜„ํ•˜๊ธฐ ๋” ์‰ฝ๋‹ค๋ฉด(๋”ฐ๋ผ์„œ ์ด ์ œ์•ˆ์˜ ํ‹€์ด ์žกํž˜) ๋น„๋Œ€์นญ ์†”๋ฃจ์…˜๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋Œ€์นญ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ @vphilippon ์ด https://github.com/pypa/pipenv/issues/966#issuecomment -339791934์— ์„ค๋ช…๋œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ถ”๊ตฌํ•˜๋Š” ๊ฒƒ์ด ํ”„๋ ˆ์ž„ ๋ฐ ๊ตฌํ˜„์˜ ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. :

  • ๊ธฐ๋ณธ ํฌ๊ด„์ ์ธ ์—…๋ฐ์ดํŠธ๊ฐ€ ์•„๋‹Œ ์ตœ์†Œํ•œ์˜ ์ž ๊ธˆ ํŒŒ์ผ ์—…๋ฐ์ดํŠธ๋ฅผ ์š”์ฒญํ•˜๋Š” pipenv lock --keep-outdated ์˜ต์…˜ ์ถ”๊ฐ€
  • pipenv install package ๋ฅผ "Pipfile ํŽธ์ง‘ -> pipenv lock --keep-outdated -> pipenv install "๋กœ ์ •์˜ํ•˜๋„๋ก ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

(์ฐธ๊ณ  : ๋ณด์•ˆ ๊ด€๋ฆฌ์ƒ์˜ ์ด์œ ๋กœ, ๋‚œ ์ •๋ง์˜ ๊ธฐ๋ณธ ๋™์ž‘์„ ์œ ์ง€ํ•˜๋ ค๋ฉด pipenv lock ์—…๊ทธ๋ ˆ์ด๋“œ ๋“ฑ ๋ชจ๋“  ๊ฒƒ์„ - ๊ทธ๋Ÿฌ๋‚˜, ๋‚˜๋Š” ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ƒ๊ฐ ํ•˜๋Š”๊ฐ€ --keep-outdated ๋‹ค๋ฅธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์ œ์ž๋ฆฌ์—์žˆ์„ ๋•Œ ์žฅ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์ข…์†์„ฑ์—์„œ ๋ณด๊ณ ๋œ ๋ณด์•ˆ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ ์‹œ ์‘๋‹ต์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด)

pipenv install ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๋Š” ๋™์ž‘์€ ๋Œ€๋ถ€๋ถ„ #966์ด ์–ป๋Š” ๊ฒƒ์ด์ง€๋งŒ ์ •ํ™•ํžˆ ๋™์ผํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. X = "*" ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ์ƒํ•ด๋ณด์‹ญ์‹œ์˜ค. ์ด๋ ‡๊ฒŒ pipenv install X ์•„๋งˆ ์—ฌ์ „ํžˆ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค X ์— ๋ณ€ํ™”๊ฐ€ ์—†๋‹คํ•˜๋”๋ผ๋„, ์ž ๊ธˆ ํŒŒ์ผ์— Pipfile . Pipenv๋Š” _์‹ค์ œ๋กœ_ ์—…๋ฐ์ดํŠธ๋˜๋Š” ๋‚ด์šฉ์„ ์ถ”์ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, "์ž ๊ธˆ"์—์„œ "์„ค์น˜"๋ฅผ ์™„์ „ํžˆ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด https://github.com/taion/pipf/blob/1feee35a2e4480bc7e5b53bfab17587d37bdf9dd/pipf/pipfile.py#L150 -L155๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ์ž ๊ธˆ ํŒŒ์ผ์„ ์žฌ์ƒ์„ฑํ•  ๋•Œ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด ์„ค์น˜๋˜๋Š” ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์ด์ „ ์ œ์•ฝ ์กฐ๊ฑด์„ ๋ช…์‹œ์ ์œผ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. .

์–ด์จŒ๋“  ๋ถˆ๋งŒ์€ ๋ช…์‹œ์ ์ธ pipenv lock ์™€ ๊ฐ™์€ ๊ฒƒ์ด ๋ชจ๋“  ์ข…์†์„ฑ์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ตœ์‹ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•œ๋‹ค๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. pipenv install Y ๊ฐ€ ๊ด€๋ จ ์—†๋Š” X ์˜ ๋ฒ„์ „์„ ๊ฑด๋“œ๋ฆฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด์„œ, ์‚ฌ๋žŒ๋“ค์€ ์‹ค์ œ๋กœ pipenv lock --keep-outdated ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ Yarn์˜ ์ฒ˜๋ฆฌ๋Š” CLI ์ธก๋ฉด์—์„œ ๊ฝค ์ข‹์€ ์˜ˆ์ž…๋‹ˆ๋‹ค. Yarn์—๋Š” ์•„๋ฌด ๊ฒƒ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์ž ๊ธˆ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” yarn lockfile ๊ฐ€ ์žˆ์œผ๋ฉฐ ๋ช…์‹œ์ ์œผ๋กœ "[not] required"๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ์œผ๋ฉฐ ๋ชจ๋“  ๊ฒƒ์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” yarn upgrade ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์ด์œ ๋กœ ์ข…์†์„ฑ์„ ์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘ํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ๋‹จ๊ณ„๋Š” yarn install ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ž ๊ธˆ ํŒŒ์ผ์„ (์ตœ์†Œํ•˜๊ฒŒ) ์—…๋ฐ์ดํŠธํ•˜๊ณ  ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ๋œ ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ ์™ธ์—๋Š” ์ž ๊ธˆ ํŒŒ์ผ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ƒ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ์œผ๋ฉฐ ์™œ ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ณ  ์‹ถ์€์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์„ค์น˜๋œ ์ข…์†์„ฑ์„ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ทจํ•˜๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ์ž‘์—…์ด ์–ด์จŒ๋“  ์ž ๊ธˆ ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž ๊ธˆ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์˜ ์ผ๋ฐ˜์ ์ธ ์ž‘์—…์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋Œ€์‹  ์‚ฌ์šฉ์ž ๋Œ€๋ฉด ์ƒํ˜ธ ์ž‘์šฉ ์„ธํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๋ชจ๋“  ์ข…์†์„ฑ ์„ค์น˜
  2. ํ•˜๋‚˜ ์ด์ƒ์˜ ํŠน์ • ์ข…์†์„ฑ ์ถ”๊ฐ€ ๋˜๋Š” ์—…๊ทธ๋ ˆ์ด๋“œ
  3. ๋ชจ๋“  ์ข…์†์„ฑ ์—…๊ทธ๋ ˆ์ด๋“œ

(1)๊ณผ (2)๋Š” ํ•ญ์ƒ ๋‚ด ์ž ๊ธˆ ํŒŒ์ผ์— ์ตœ์†Œํ•œ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•ด์•ผ ํ•˜๋ฉฐ(๋˜๋Š” ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ƒ์„ฑํ•ด์•ผ ํ•จ), (3)์€ ๋ณธ์งˆ์ ์œผ๋กœ ๊ธฐ์กด ์ž ๊ธˆ ํŒŒ์ผ์„ ๋ฌด์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ž ๊ธˆ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ (1)์ด๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค(์–ด์จŒ๋“  ๋ชจ๋“  ๊ฒƒ์ด ์„ค์น˜๋œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค).

PS Yarn์€ yarn install (๋ชจ๋“  ์ข…์†์„ฑ ์„ค์น˜)์—์„œ yarn add (์ข…์†์„ฑ ์ถ”๊ฐ€)๋ฅผ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋‹ค์†Œ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ณ  ์งœ์ฆ์ด ๋‚ฌ์ง€๋งŒ ์‚ฌ์šฉํ• ์ˆ˜๋ก ๊ทธ ๊ตฌ๋ถ„์ด ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค. ํŠน์ • ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ  _๊ทธ๋ฆฌ๊ณ _ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๋Š” ๋‹จ์ผ install ๋ช…๋ น์„ ๊ฐ–๋Š” ๊ฒƒ์€ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์ด์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐ€์ง€ ํ–‰๋™์€ ๊ฐ™์€ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

https://lwn.net/Articles/711906/ ์˜ ์ฒ˜์Œ ๋ช‡ ๋‹จ๋ฝ์€ ์—ฌ๊ธฐ์—์„œ ๋‚ด ์‚ฌ๊ณ ๋ฐฉ์‹์„ ์ž˜ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. "์›€์ง์ด๋Š” ๋Œ€์ƒ"์€ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ณธ ๋ณด์•ˆ ๋ชจ๋ธ์ด์–ด์•ผ ํ•˜๋ฉฐ ์ด๋ฅผ ์˜ตํŠธ์•„์›ƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. "๋‹จ๋‹จํ•œ ๋ฒ™์ปค" ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ ˆ์ถฉ์ ์„ ๊ณ ๋ คํ•œ ํ›„์—๋งŒ ์‹ ์ค‘ํ•œ ์„ค๊ณ„ ๊ฒฐ์ •์„ ๋‚ด๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์˜ต์…˜ ์ด๋ฆ„๋„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. --keep-outdated ๋Š” pip list --outdated ์—์„œ ์˜๊ฐ์„ ๋ฐ›์€ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ช…๋ น์ค„์—์„œ ์˜์‹ฌ์Šค๋Ÿฝ๊ฒŒ ๋ณด์ด๋„๋ก ์˜๋„์ ์œผ๋กœ ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ณด์•ˆ ๊ด€์ ).

pipenv install X ์˜ ํŠน์ • ๊ฒฝ์šฐ ์—๋Š” ์•”์‹œ์ ์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. pip install X ๋Š” ์•”์‹œ์ ์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

pipenv ๋Š” ํ˜„์žฌ ํ›„์ž์˜ ์ ๊ณผ ๊ด€๋ จํ•˜์—ฌ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ์ผ๊ด€์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค.

  • pip install package ํ˜ธ์ถœ(์•”์‹œ์  ์—…๊ทธ๋ ˆ์ด๋“œ ์—†์Œ)
  • pipenv lock ํ˜ธ์ถœ(์•”์‹œ์  ์—…๊ทธ๋ ˆ์ด๋“œ)

๋”ฐ๋ผ์„œ ํ•ญ์ƒ ์ž ๊ธˆ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜๋ฅผ ์œ ๋„ํ•˜๊ณ ( --skip-lock ๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํ•œ) ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๊ณ  pip์˜ only-if-needed ์—…๊ทธ๋ ˆ์ด๋“œ ์ „๋žต๊ณผ ์ผ์น˜ํ•˜๋„๋ก pipenv lock --keep-outdated ๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์˜์กด์„ฑ์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค๋Š” ์‹ค์งˆ์ ์ธ ์š”์ ์— ๋™์˜ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฌผ๋ก  pipenv install -U <package> ๋‹จ์ผ ํŒจํ‚ค์ง€๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์€ Pip๊ณผ ๋ณ‘ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ ์›Œํฌํ”Œ๋กœ์—์„œ ์‚ฌ์šฉ์ž๋Š” --keep-outdated ๋˜๋Š” ๊ธฐํƒ€ ์—†์ด pipenv lock ๋ฅผ ์‹คํ–‰ํ•  ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น ์„ธํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ƒˆ๋กœ์šด ํŒจํ‚ค์ง€ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ: pipenv init
  • ํ”„๋กœ์ ํŠธ์˜ ์ƒˆ ํด๋ก  ์„ค์ •: pipenv install
  • ์ƒˆ ์ข…์†์„ฑ ์ถ”๊ฐ€: pipenv install <package> (๊ทธ๋ฆฌ๊ณ  Yarn์ด ์ด๊ฒƒ์„ add ๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์„ ๋‹ค์‹œ ์ฃผ๋ชฉํ•˜์„ธ์š”. ์ด๋Š” ์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค)
  • Pipfile ์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘ํ•œ ํ›„ ์„ค์น˜๋œ ์ข…์†์„ฑ์„ ๋‹ค์‹œ ๋™๊ธฐํ™”ํ•˜์‹ญ์‹œ์˜ค: pipenv install
  • ๋ชจ๋“  ์ข…์†์„ฑ์„ ์ตœ์‹  ํ˜ธํ™˜ ๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ: pipenv update

์œ„์˜ ๋ชจ๋“  ์ž‘์—…์€ Pipfile.lock ๋ฅผ ๋™๊ธฐํ™” ์ƒํƒœ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋˜๋Š” ๋‹ฌ๋ฆฌ ๋งํ•˜๋ฉด npm shrinkwrap (npm 5 ์‚ฌ์šฉ)์„ ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ๊ณ  yarn lockfile ๋ฅผ ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

(๊ทธ๋ฆฌ๊ณ  ์—…๋ฐ์ดํŠธ๋œ ์ข…์†์„ฑ์ด ์žˆ๋Š” ์ž ๊ธˆ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๊ทธ๋‹ค์ง€ ์œ ์šฉํ•˜์ง€ ์•Š์€ ์ด์œ ๋Š” ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์˜ ๋ฐ”๋กœ ๋‹ค์Œ ๋‹จ๊ณ„๊ฐ€ ์—…๋ฐ์ดํŠธ๋œ ์ข…์†์„ฑ์„ ๋‹ค์‹œ ์„ค์น˜ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.)

FWIW, ๋‚ด๊ฐ€ ์ข…์† ์—…๋ฐ์ดํŠธ์˜ PR ์ž๋™์œผ๋กœ (์ƒ์„ฑํ•˜๋Š” ๋„๊ตฌ๋ฅผ ์‹คํ–‰ Dependabot์„ Pipfiles ์œ„ํ•ด ํฌํ•จํ•˜์—ฌ), ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ์‚ฌ๋ž‘ pipenv lock --keep-outdated ์˜ต์…˜์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ Pipfiles๋ฅผ ํŽธ์ง‘ํ•˜์—ฌ PR์„ ์ƒ์„ฑํ•  ๋•Œ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ข…์†์„ฑ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์ข…์†์„ฑ์„ ์ž ๊ธ‰๋‹ˆ๋‹ค.

๋‚ด ๊ฒฝํ—˜์ƒ ๋‹จ์ผ ์ข…์†์„ฑ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” PR์€ ํ•œ ๋ฒˆ์— ๋งŽ์€ ์ข…์†์„ฑ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” PR๋ณด๋‹ค ๋ณ‘ํ•ฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด

๋งž์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  PR ์ƒ์„ฑ์€ pipenv lock --keep-outdated ๊ฐ€ ์œ ์šฉํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. "pipenv install && run tests" ๋‹จ๊ณ„๋Š” PR์ด ์ƒ์„ฑ๋œ ์‹œ์Šคํ…œ์ด ์•„๋‹ˆ๋ผ CI ์„œ๋ฒ„์—์„œ ์›๊ฒฉ์œผ๋กœ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ pipenv lock ๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋กœ์ปฌ์— ์ ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ง€๋‚˜์น˜๊ฒŒ ๊ฑฑ์ •ํ•˜์ง€ ์•Š๊ณ  CI์—์„œ ํ…Œ์ŠคํŠธํ•  ์ผ๊ด„ ์—…๋ฐ์ดํŠธ PR์„ ์ƒ์„ฑํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋งฅ๋ฝ์—์„œ pipenv install <requirement> ๊ฐ€ "update Pipfile + pipenv lock --keep-outdated + pipenv install "์™€ ๋™๋“ฑํ•ด์ง„๋‹ค๋ฉด pipenv update ๊ฐ€ ๋™๋“ฑํ•ด์ง€๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. pipenv lock && pipenv install .

ํ•˜์ง€๋งŒ yarn ๊ตฌ๋ณ„ํ•˜๊ฒŒ yarn install ๋ฐ yarn add , ์šฐ๋ฆฌ๊ฐ€ ์ด์ œ๊นŒ์ง€ ๊ทธ๋Ÿฌํ•œ ๊ตฌ๋ถ„์„ ์ถ”๊ฐ€ํ•œ๋‹ค๋ฉด pipenv , ๋‚˜๋Š” ๋” ๋นŒ๋ ค ๊ฒฝ์‚ฌ ํ•  ๊ฒƒ pip-tools ์šฉ์–ด์—์„œ pipenv sync ๋ช…๋ น์„ ์ถ”๊ฐ€ํ•˜์—ฌ "ํ˜„์žฌ ํ™˜๊ฒฝ์„ ์ž ๊ธˆ ํŒŒ์ผ๊ณผ ์ผ์น˜์‹œํ‚ค์‹ญ์‹œ์˜ค"๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฒƒ์€ ์ด ์ œ์•ˆ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ๋ฐฐํฌ ์ข…์†์„ฑ๊ณผ ๊ฐœ๋ฐœ ์ข…์†์„ฑ ๊ฐ„์— ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ธฐํšŒ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@greysteil

Greenkeeper/&c์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. npm์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋งž์ฃ ?

$ npm install --package-lock-only <package><strong i="8">@latest</strong>

์‚ฌ์‹ค npm5๋„ ๋งŒ๋“ค _just_ ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ• ๋…ธ์ถœ ์•Š์Šต๋‹ˆ๋‹ค package-lock.json ์™ธ๋ถ€ npm install ?

@ncoghlan

Greenkeeper์™€ ๊ฐ™์€ ์„œ๋น„์Šค๋Š” ๋งค์šฐ ํ›Œ๋ฅญํ•˜๊ณ  ์‚ฌ์šฉํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์ง€๋งŒ ํ•ต์‹ฌ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์€ ์ด์ƒํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋” ๊นจ๋—ํ•œ ํ‘œํ˜„์„ ์ธ์ •ํ•ฉ๋‹ˆ๋‹ค).

์•—, ๋„ˆ๋ฌด ๋นจ๋ฆฌ ์—”ํ„ฐ๋ฅผ ์ณค์Šต๋‹ˆ๋‹ค. Greenkeeper ์Šคํƒ€์ผ์˜ ์›Œํฌํ”Œ๋กœ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋กœ์ปฌ์—์„œ ๋™๊ธฐํ™”ํ•˜์ง€ ์•Š๊ณ  ์ข…์†์„ฑ์„ _๊ทธ๋ƒฅ_ ๋ฒ”ํ•˜๋Š” ๊ฒƒ์€ ๊ฑฐ์˜ ์‚ฌ๋ผ์ ธ ๋ฒ„๋ฆด ์ •๋„๋กœ ๋“œ๋ฌธ ์ผ์ž…๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ๋“  deps์˜ ๋กœ์ปฌ ๋ณต์‚ฌ๋ณธ์ด ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ PR ์ „์šฉ ์„œ๋น„์Šค๋Š” ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์˜ ์„ค๋ช…์€ " ์ธ๊ฐ„์„ ์œ„ํ•œ Python ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ"์ด๋ฏ€๋กœ ์‹ค์ œ ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋Š”์ง€ ์—ผ๋‘์— ๋‘˜ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” "๋กํŒŒ์ผ ์ƒ์„ฑ" ์ž‘์—…์„ ๋ช…์‹œ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๊ฑฐ์˜ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฝค ์ข‹์€ ์กด์žฌ ์ฆ๊ฑฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ด์— ๋Œ€ํ•ด ๋„ˆ๋ฌด ๋งŽ์ด ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.


์—ฌ๊ธฐ์„œ ํŠน์ • ๋ฌธ์ œ์ธ BTW๋Š” Pipenv๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ * ๋ฒ”์œ„๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. pipenv install flask ํ•˜๋ฉด flask = "*" ์— Pipfile ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์„ค์น˜๋œ Flask ๋ฒ„์ „์„ ๊น”๋”ํ•œ ๋ฐฉ์‹์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ž ๊ธˆ ํŒŒ์ผ ์ „์šฉ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์—…๊ทธ๋ ˆ์ด๋“œ ์ž‘์—…์€ ์›์น™์ ์œผ๋กœ * ์š”๊ตฌ ์‚ฌํ•ญ์„ >= ๋ฒ”์œ„ ๋˜๋Š” Pipfile ์— ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” "์—…๊ทธ๋ ˆ์ด๋“œ"์™€ "์ดˆ๊ธฐ ์„ค์น˜" ์‚ฌ์ด์— ์ด์ƒํ•œ ๋น„๋Œ€์นญ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๊ฐ€์žฅ ์ข‹์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์–ด์จŒ๋“  ์ดˆ๊ธฐ ์„ค์น˜์— >= ๋ฒ”์œ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ ์–ด๋„ ๊ฑฐ๊ธฐ์—์„œ * ๋ฒ”์œ„๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ํƒ€๋‹นํ•œ ์ด์œ ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@taion - ๋„ค, ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์ด ์šฐ๋ฆฌ/๋‹ค๋ฅธ ์ข…์†์„ฑ ์—…๋ฐ์ดํŠธ ๋„๊ตฌ๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ์—ผ๋‘์— ๋‘๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๋งค์šฐ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋‚ด๊ฐ€ ์ด์ „ ์ง์žฅ์—์„œ ์ข…์†์„ฑ์„ ์—…๋ฐ์ดํŠธํ–ˆ๋‹ค๋ฉด ์ˆ˜๋™์œผ๋กœ pipenv lock --keep-outdated ์‚ฌ์šฉํ–ˆ์„ ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ธ๊ธ‰ํ•œ ๊ฒƒ ๋ฟ์ž…๋‹ˆ๋‹ค(์šฐ๋ฆฌ๋Š” ์ข…์†์„ฑ ์—…๋ฐ์ดํŠธ ์ •์ฑ…๋‹น ํ•˜๋‚˜์˜ PR์„ ๊ฐ€์ง).

์ฐธ๊ณ ๋กœ npm ๋Š” ์ตœ์‹  ๋ฆด๋ฆฌ์Šค( changelog )์—์„œ package-lock-only ์˜ต์…˜์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

@greysteil * ๋ฒ”์œ„๊ฐ€ Pipfile ์ด๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์œ„์˜ flask = "*" ์˜ˆ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด Pipenv๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ž ๊ธˆ ํŒŒ์ผ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•  ๋•Œ ๊ณ ์ •์„ ํ•ด์ œํ•ด์•ผ ํ•˜๋Š” ์š”๊ตฌ ์‚ฌํ•ญ์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋‹ˆ์š”?

_๋‚˜๋Š” ์ด ์Šค๋ ˆ๋“œ์˜ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ˆ˜ํ–‰ํ•˜๋Š” ์„ธ๋ถ€ ์‚ฌํ•ญ ๊ทผ์ฒ˜์—์„œ Pipenv์˜ ์ž‘์—…์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋ฉฐ ์ฃผ์ œ์—์„œ ๋ฒ—์–ด๋‚˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๊ฐ€ ์œ ์šฉํ•˜๋‹ค๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค!_

์šฐ๋ฆฌ๋Š” ๋ถˆ์พŒํ•œ hax๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

  • ์—…๋ฐ์ดํŠธํ•  ๋ฒ„์ „์„ ์ฐพ๊ธฐ ์œ„ํ•ด ํ˜„์žฌ ์ตœ์‹  ๋ฒ„์ „์„ ์–ป์Šต๋‹ˆ๋‹ค( pip-tool ์˜ ๋ฆฌ์กธ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜์ง€๋งŒ ์•„์ง ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๋‚˜์˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. )
  • ํ•ด๋‹น (์ตœ์ƒ์œ„) ์ข…์†์„ฑ๋งŒ ์—…๋ฐ์ดํŠธํ•˜๋Š” Pipfile.lock ๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด

    1. ์ตœ์‹  ๋ฒ„์ „์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ข…์†์„ฑ์— ๋Œ€ํ•œ Pipfile ํ•ญ๋ชฉ ์—…๋ฐ์ดํŠธ

    2. ๊ธฐ์กด ์ž ๊ธˆ ํŒŒ์ผ ๊ตฌ๋ฌธ ๋ถ„์„

    3. ๋‹ค๋ฅธ ๋ชจ๋“  ์ข…์†์„ฑ์— ๋Œ€ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ž ๊ธˆ ํŒŒ์ผ์—์„œ ํ•ด๊ฒฐ๋œ ํ•ญ๋ชฉ์œผ๋กœ ์„ค์ •ํ•˜๋„๋ก Pipfile์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

    4. pipenv lock ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ƒˆ ์ž ๊ธˆ ํŒŒ์ผ ์ƒ์„ฑ

    5. ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ์ž ๊ธˆ ํŒŒ์ผ์˜ ํ•ด์‹œ๋ฅผ 3๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค(์ •๋ง ์ œ๊ฑฐํ•˜๊ณ  ์‹ถ์€ ๋”์ฐํ•œ ํ•ดํ‚น).

์ตœ์ข… ๊ฒฐ๊ณผ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ Pipfile ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ PR์„ ์–ป์ง€ * ) Pipfile.lock ๊ฐ€ ํ•ด๋‹น ์ข…์†์„ฑ์˜ ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋„๋ก ์—…๋ฐ์ดํŠธ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ํ•œ pipenv lock --keep-outdated ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋Œ€์‹  ๋‹ค์Œ ํ๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ตœ์‹  ๋ฒ„์ „ ๊ณผ ๋™์ผ ํ•˜๋„๋ก ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ข…์†์„ฑ์— ๋Œ€ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ ์—…๋ฐ์ดํŠธ
  2. pipenv lock --keep-outdated ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ƒˆ ์ž ๊ธˆ ํŒŒ์ผ ์ƒ์„ฑ
  3. ์ตœ์‹  ๋ฒ„์ „์„ ์ง€์› ํ•˜๋„๋ก Pipfile๋งŒ ์—…๋ฐ์ดํŠธํ–ˆ๋‹ค๋ฉด ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ์ž ๊ธˆ ํŒŒ์ผ์˜ ํ•ด์‹œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์‹ญ์‹œ์˜ค.

๊ทธ๋ž˜์„œ, ๊ทธ๊ฒƒ์€ ๋ฌด๋ฆฌ๊ฐ€ ๋” ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. pipenv lock --keep-outdated <some_package_name> ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์ด์ƒ์ ์ด์ง€๋งŒ ๊ฑฐ์ง€๋Š” ์„ ํƒ์ž๊ฐ€ ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค! :์˜ฅํ† ์บฃ:

๋‚ด Pipfile์— ๋‹ค์Œ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

flask = "*"
numpy = "*"

flask ๋Š” werkzeug ์— ์ดํ–‰์ ์œผ๋กœ ์˜์กดํ•ฉ๋‹ˆ๋‹ค. flask ๋ฐ numpy ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์—…๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ์žˆ๊ณ  flask ๋ฒ„์ „์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์ง€๋งŒ numpy ๋ฒ„์ „์€ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

Pipenv๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

$ pip install -U flask
$ pip freeze > requirements.txt

pip-tools๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

$ pip-compile -P flask
$ pip-sync # Or: pip install -r requirements.txt

๊ธ€์Ž„์š”, ๊ทธ๋ƒฅ pipenv lock --keep-outdated ๊ฐ€์ƒ์œผ๋กœ ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์•„๋ฌด ์†Œ์šฉ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— ์ž ๊ธˆ ํŒŒ์ผ์„ ์™„์ „ํžˆ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋ฉด NumPy๋„ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์˜คํ•ด๊ฐ€์žˆ์–ดํ•˜์ง€ ์•Š๋Š” ํ•œ, ์œ„์—์„œ ์„ค๋ช…ํ•˜๋Š” ์ „๋žต ๋งŒ์˜ ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค flask ์ž ๊ธˆ ํŒŒ์ผ์— ์žˆ์ง€๋งŒ ๋ฒ„์ „ werkzeug . flask ์˜ ์ƒˆ ๋ฒ„์ „์ด werkzeug ์˜ ์ƒˆ ๋ฒ„์ „๋„ _ํ•„์š”_ํ•œ ๊ฒฝ์šฐ ์ด๋Š” ์ž˜๋ชป๋œ ์ข…์†์„ฑ ์„ธํŠธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์‚ฌ๋žŒ์ด ์ข…์†์„ฑ์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๋ฐ ๋งค์šฐ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ด ๊ฒฝ์šฐ ๋‹จ์ผ ํŒจํ‚ค์ง€์™€ ํ•ด๋‹น ์ „์ด ์ข…์†์„ฑ(ํ•„์š”ํ•œ ๊ฒฝ์šฐ)์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ํŠนํžˆ * ์ข…์†์„ฑ์ž…๋‹ˆ๋‹ค. npm์ด ์ด๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

flask = ">=0.12.1"

๊ทธ๋Ÿฐ ๋‹ค์Œ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์š”์ฒญํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

flask = ">=0.12.2"

์ด ๊ฒฝ์šฐ pipenv lock --keep-outdated ์™€ ๊ฐ™์€ ๊ฒƒ์„ ์‹คํ–‰ํ•˜๋Š” ์œ„์˜ ์ „๋žต์ด ์˜ฌ๋ฐ”๋ฅธ ์ผ์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ทธ๋Ÿฌ๋‚˜ * ๋ฒ”์œ„๋ฅผ ๋‹ค์Œ ๋‚ด๊ฐ€ ์ข‹์•„ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ํŠน๋ณ„ํ•œ ๋„๊ตฌ์—†์ด ํ•  ์ˆ˜์žˆ๋Š” ์ง„์ •ํ•œ ๋ฐฉ๋ฒ•์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค pipenv install -U flask ๋‹ค์Œ ๋–จ์–ด์งˆ ๊ฒƒ์„, flask ํŠน๋ณ„ํžˆ ์ž ๊ธˆ ํŒŒ์ผ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•  ๋•Œ ์ œ์•ˆ๋œ ํ•€์ž…๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ (iii) ๋‹จ๊ณ„์— ๋Œ€ํ•ด ์ถฉ๋ถ„ํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž ๊ธˆ ํŒŒ์ผ์˜ ๋ฒ„์ „์— ๋Œ€ํ•œ ๋ชจ๋“  ์ตœ์ƒ์œ„ ์ข…์†์„ฑ์„ ์ž ๊ทธ์ง€๋งŒ ํ•˜์œ„ ์ข…์†์„ฑ์€ ์ž ๊ธˆ ํ•ด์ œ๋œ ์ƒํƒœ๋กœ ๋‘ก๋‹ˆ๋‹ค.

@greysteil ๋‚ด๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ž ์žฌ์ ์œผ๋กœ ๋‹ค๋ฅธ ์ง์ ‘ ์ข…์†์„ฑ์˜ ์ „์ด ์ข…์†์„ฑ์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ - ์ด๋ก ์€ ์ตœ์ƒ์œ„ ์ข…์†์„ฑ์ด ํ•˜์œ„ ์ข…์†์„ฑ์„ ์ ์ ˆํ•˜๊ฒŒ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ(์ฆ‰, ๋น„๊ด€์ ์œผ๋กœ) ํ•˜์œ„ ์ข…์†์„ฑ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ด ์œ„ํ—˜ํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

(๋‚˜๋Š” ์˜คํžˆ๋ ค ์—…๋ฐ์ดํŠธ๋˜๋Š” ์ข…์†์„ฑ์˜ ํ•˜์œ„ ์ข…์†์„ฑ๋งŒ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋Š” Ruby's Bundler์— ๋” ๊ฐ€๊น์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ pipenv๋Š” ํ•ด์ปค์˜ ๊ฐ€์น˜๊ฐ€ ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค.)

@taion ๊ธฐ๋ณธ์  ์œผ๋กœ pipenv ์€ LCA ๊ฐ•์—ฐ์—์„œ ์„ค๋ช…ํ•œ "์›€์ง์ด๋Š” ํ‘œ์ " ๋ณด์•ˆ ๋ชจ๋ธ์— ๊ฑฐ์˜ ์ „์ ์œผ๋กœ ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‘ ๊ฐ€์ง€ ์˜๋„๋œ ์‚ฌ์šฉ ๋ชจ๋ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋Œ€ํ™”์‹ ์ผ๊ด„ ์—…๋ฐ์ดํŠธ:

    • ์‚ฌ๋žŒ์€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ผ๋ถ€ ์ž‘์—…(๋ช…์‹œ์  ์ผ๊ด„ ์—…๋ฐ์ดํŠธ, ์ƒˆ ์ข…์†์„ฑ ์ถ”๊ฐ€, ๋ช…์‹œ์  ์ข…์†์„ฑ ์—…๊ทธ๋ ˆ์ด๋“œ)์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋Ÿฌํ•œ ์ž‘์—…์˜ ์ผ๋ถ€๋กœ ์ž ๊ธˆ ํŒŒ์ผ๊ณผ ํ˜„์žฌ ํ™˜๊ฒฝ์ด Pipfile ํ‘œ์‹œ๋œ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ๋ชจ๋“  ํ•ญ๋ชฉ์˜ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.
    • ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์ด ์ž‘์—… ๋ฐฉ์‹์ด ๊ณ ํ†ต์Šค๋Ÿฝ์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ ํ‘œํ˜„๋œ ์ œ์•ฝ ์กฐ๊ฑด์ด ์—…๋ฐ์ดํŠธ๋˜๊ณ  ์„ ํƒ๋œ ์ข…์†์„ฑ์ด ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋ž˜์˜ ๋‘ ๋ฒˆ์งธ ์˜ต์…˜์œผ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์ž๋™ ์„ ํƒ ์—…๋ฐ์ดํŠธ:

    • ์ž๋™ํ™”๋œ ํ”„๋กœ์„ธ์Šค๋Š” ์ข…์†์„ฑ์˜ ์ƒˆ ๋ฒ„์ „์„ ๊ณ„์† ๊ฐ์‹œํ•˜๊ณ  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์งˆ ๋•Œ๋งˆ๋‹ค ๋ฌธ์ œ+PR์„ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค.
    • ์ธ๊ฐ„์€ ์ฃผ๋กœ ์ƒˆ๋กœ์šด ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜๊ณ , ์˜์กด์„ฑ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ถ”๊ฐ€ํ•˜๊ณ , ๊ธฐ์กด ์˜์กด์„ฑ์— ๋Œ€ํ•œ ํ‘œํ˜„๋œ ์ œ์•ฝ์„ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ํ˜„์žฌ ๋‘ ์‚ฌ์šฉ ๋ชจ๋ธ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” CLI ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€ํ™”์‹ ๋ฐฐ์น˜ ์—…๋ฐ์ดํŠธ์˜ ๊ฒฝ์šฐ ์ž ๊ธˆ ํŒŒ์ผ๊ณผ ๋กœ์ปฌ ํ™˜๊ฒฝ์ด ๋™๊ธฐํ™”๋˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๊ณ  ์ž๋™ํ™”๋œ ์„ ํƒ์  ์—…๋ฐ์ดํŠธ์˜ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ํƒ์  ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋„๊ตฌ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ๊ด€๋ จ ๋Œ€ํ™”ํ˜• ์„ ํƒ์  ์ž‘์—…์„ ํ™œ์„ฑํ™”ํ•˜์—ฌ ์ƒˆ ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ธฐ์กด ์ข…์†์„ฑ์— ๋Œ€ํ•œ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ " Pipfile ์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ๋‹ฌ๋ฆฌ ๋ช…์‹œํ•˜์ง€ ์•Š๋Š” ํ•œ ๋ชจ๋“  ๊ฒƒ์˜ ์ตœ์‹  ๋ฒ„์ „์„ ๊ธฐ๋ณธ์œผ๋กœ ์‹คํ–‰"์ด๋ผ๋Š” ํ•ต์‹ฌ ์„ค๊ณ„ ์ฒ ํ•™์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž ๊ธˆ ํŒŒ์ผ ์—…๋ฐ์ดํŠธ๋Š” ์‚ฌ๋žŒ์ด ์ œ์ถœํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์—…๋ฐ์ดํŠธ ๊ด€๋ฆฌ ์„œ๋น„์Šค์—์„œ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค.

์ž๋™ํ™”๋œ ๋„๊ตฌ๊ฐ€ @ncoghlan์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ณ  ์žˆ๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๋ผ๋Š” ๊ฒƒ์„ ์ฝ๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๐ŸŽ‰

Dependabot/๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์›ํ•˜๊ฑฐ๋‚˜/ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์›ํ•˜์‹œ๋ฉด ์ €์—๊ฒŒ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค. ํŒŒ์ด์ฌ์€ ์ œ ๋ชจ๊ตญ์–ด๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ์•„์ง pip/pipenv์— ๊ธฐ์—ฌํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ์ œ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฐฉ๋ฒ•์œผ๋กœ ๋•๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@ncoghlan ์ €๋Š” ์—ฌ๊ธฐ์— ์ „์ ์œผ๋กœ ๋™์˜ํ•˜๋ฉฐ ๊ท€ํ•˜๊ฐ€ ์„ค๋ช…ํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์ด ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. LocalRequirementsRepository ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ฝ”๋“œ ๊ด€์ ์—์„œ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๊ทธ๋ฆฌ ์–ด๋ ต์ง€ ์•Š์œผ๋ฉฐ ์ด๋Š” ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์ œ ์ƒ๊ฐ๊ณผ๋„ ์ผ์น˜ํ•˜๋ฉฐ ์ด ํ† ๋ก ์€ ๋งค์šฐ ์ƒ์‚ฐ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

@techalchemy ์ข‹์•„์š”, ๋Œ€์นญ ์ œ์•ˆ์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ์ดˆ๊ธฐ ๊ฒŒ์‹œ๋ฌผ์„ ์ˆ˜์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค(์ฆ‰, ์ง€๊ธˆ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ค์น˜๋ฅผ ๋จผ์ € ์‹คํ–‰ํ•˜๋Š” ๋Œ€์‹  pipenv lock --keep-outdated + pipenv install --ignore-pipfile ํ†ตํ•ด ์ƒˆ ํŒจํ‚ค์ง€ ์„ค์น˜๋ฅผ ์ฒ˜๋ฆฌํ•จ) .

์ด๋Š” ์—ฌ์ „ํžˆ ๋ช‡ ๊ฐ€์ง€ ๋ฏธํ•ด๊ฒฐ ์งˆ๋ฌธ(์˜ˆ --skip-lock ์ด ํ•ด๋‹น ๋ชจ๋ธ์—์„œ ์ž‘๋™ํ•ด์•ผ ํ•จ)์„ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐœ๋ณ„ ๊ธฐ๋Šฅ ์š”์ฒญ( --keep-outdated ์„ pipenv lock ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€)์„ ๋ถ„๋ฅ˜ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์—…๊ทธ๋ ˆ์ด๋“œ ์ „๋žต์„ ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ

์ข‹์Šต๋‹ˆ๋‹ค. ์ž ๊ธˆ ํŒŒ์ผ๊ณผ ๋กœ์ปฌ ํ™˜๊ฒฝ์„ ๋™๊ธฐํ™”ํ•˜๊ธฐ๊ฐ€ ์ •๋ง ์–ด๋ ค์šด ์ƒํƒœ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์ œ์•ˆ๋œ ํ•˜์œ„ ๋‹จ๊ณ„๋กœ ์ดˆ๊ธฐ ๊ฒŒ์‹œ๋ฌผ์„ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

์ œ์•ˆ๋œ ํ•˜์œ„ ๋‹จ๊ณ„ ์ค‘์—์„œ pipenv sync ํ•˜์œ„ ๋ช…๋ น๊ณผ pipenv lock --keep-outdated ์˜ต์…˜์€ ์ด๋ฏธ ๊ด€์‹ฌ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์ด ๊ตฌํ˜„์„ ์‚ดํŽด๋ณด๊ธฐ์— ์ถฉ๋ถ„ํžˆ ๋ช…ํ™•ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ชจ๋“  ์ž‘์—…์˜ โ€‹โ€‹์˜๋ฏธ ์ฒด๊ณ„๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ์•„์ด๋””์–ด๋Š” Pipfile ํŽธ์ง‘ ๋ฐ pipenv lock ๋ฐ pipenv sync ์˜ ๋™์ž‘ ์ธก๋ฉด์—์„œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์ถ”๊ฐ€ ๋…ผ์˜๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ข‹์•„ ๋ณด์ธ๋‹ค. ๊ณต๊ฐœ ์งˆ๋ฌธ์— ๋Œ€ํ•ด ์ €๋Š” pip install --selective-upgrade <package> ๋Œ€ํ•ด ์ œ์•ˆ๋œ ๋™์ž‘์— ์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค(์ฆ‰, ์ƒˆ ๋ฒ„์ „์ด ์ œ๊ณต๋˜์ง€ ์•Š๋Š” ํ•œ ๊ธฐ์กด ๋ฒ„์ „ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ค€์ˆ˜ํ•˜๋Š” ์—…๊ทธ๋ ˆ์ด๋“œ ์ˆ˜ํ–‰). ์ด๊ฒƒ์ด ๋‹จ์ผ ํŒจํ‚ค์ง€๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ์ข…์ข… ์›ํ•˜๋Š” ๋™์ž‘์ž…๋‹ˆ๋‹ค. < 2.0 ์ œ์•ฝ ์กฐ๊ฑด์ด ์žˆ๋Š” ๊ณณ์—์„œ pip install --selective-upgrade django ์‹คํ–‰ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ์‚ฌ๋ณธ ์ค‘ ์ผ๋ถ€๋ฅผ ๋ช…ํ™•ํžˆ ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ์•ˆ๋œ pipenv install --selective-upgrade ๋Š” ์‚ฌ์‹ค์ƒ ํ‘œ์ค€ pip install -U ์™€ ๊ฑฐ์˜ ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ, ์‹ค์ œ๋กœ ์‚ฌ๋žŒ๋“ค์€ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ ์ด๊ฒƒ์— ๋Œ€ํ•ด ๋งŽ์ด ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ง„๊ณต ์ƒํƒœ์—์„œ https://github.com/pypa/pipenv/issues/1255#issuecomment -355435921์—์„œ ์„ค๋ช…ํ•˜๋Š” ์›Œํฌํ”Œ๋กœ๋Š” ์˜๋ฏธ๊ฐ€ ์žˆ์ง€๋งŒ, ์˜ˆ๋ฅผ ๋“ค์–ด ์—ฌ๊ธฐ์—์„œ "์ธ๊ฐ„์„ ์œ„ํ•œ Python ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ"๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ๋ฅผ ์‹คํ—˜ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

Pipenv๋Š” ๋งŽ์€ ๊ฒƒ์„ ๋” ์ข‹๊ฒŒ ๋งŒ๋“œ๋Š” ์ •๋ง ๋ฉ‹์ง„ ํ”„๋กœ์ ํŠธ์ด์ง€๋งŒ ์—ฌ๊ธฐ ๋ชฉํ‘œ์— ๊ฝค ๊ทผ๋ณธ์ ์ธ ํ˜ผ๋ž€์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ž ๊ธˆ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋Š” ์š”์ฆ˜ ๊ฑฐ์˜ ํ‘œ์ค€์ด๋ฉฐ Python์— ์ถ•๋ณต์ด ์žˆ๋Š” ๊ฒƒ์€ ์ข‹์ง€๋งŒ "์ƒˆ๋กœ์šด ์ด๋ก ์  ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ์›Œํฌํ”Œ๋กœ ํƒ์ƒ‰"๊ณผ "์‚ฌ๋žŒ๋“ค์ด ๊ธฐ๋Œ€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ์›Œํฌํ”Œ๋กœ ๊ตฌ์ถ•"์„ ํ˜ผ๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. "๋Š” ๊ธ์ •์ ์ด๋‹ค.

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์˜ˆ๋ฅผ ๋“ค์–ด http://bundler.io/v1.16/man/bundle-install.1.html#CONSERVATIVE -UPDATING ๋ฐ ๊ธฐํƒ€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.

์—ฌ๊ธฐ์„œ ๋‚ด ๋งˆ์Œ์ด ๋ฐ”๋€Œ๋Š” ๊ฒƒ์€ ์ด๋Ÿฌํ•œ ๊ธฐ์กด ๋„๊ตฌ ์ค‘ ์ผ๋ถ€๋ฅผ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์‚ฌ์šฉํ–ˆ์œผ๋ฉฐ ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ฆ๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ธ๊ฐ„์œผ๋กœ์„œ Pipenv๊ฐ€ ์ด์œ ์— ๊ด€๊ณ„์—†์ด ์ด๋Ÿฌํ•œ ๋น„์ •์ƒ์ ์ธ ๊ธฐ๋ณธ๊ฐ’์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณด๋Š” ๊ฒƒ์€ ์ฆ๊ฑฐ์šด DX๋ฅผ ๋งŒ๋“ค์ง€ ๋ชปํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ง์”€๋“œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌํŠธ๋จธ์Šค ํ…Œ์ŠคํŠธ๋ฅผ ๋ณด๋‹ค ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด:

  1. npm, Yarn ๋˜๋Š” Bundler์™€ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ?
  2. ๊ทธ๋ ‡๋‹ค๋ฉด npm i , yarn add ๋ฐ bundle update <gem> / bundle add ๊ฐ€ ๋‹ค๋ฅธ ๋ชจ๋“  ์ข…์†์„ฑ์„ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๊นŒ?
  3. npm up , yarn upgrade ๋˜๋Š” bundle update ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋ฒˆ๊ฑฐ๋กญ์Šต๋‹ˆ๊นŒ?

๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ์—ฌ๊ธฐ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชฉํ‘œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๋„๊ตฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ƒˆ๋กœ์šด ์›Œํฌํ”Œ๋กœ๋ฅผ ์œ„ํ•œ ์ „๋„์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ด๊ฒƒ์€ ์˜๋„์ ์œผ๋กœ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๊ธฐ๋ณธ๊ฐ’์„ ์„ ํƒํ•˜๋Š” ์—ฐ์Šต์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ๋ณธ๊ฐ’์€ "์ธ๊ฐ„์„ ์œ„ํ•œ"์ด๋ผ๊ณ  ์„ค๋ช…ํ•˜๋Š” ํŒจํ‚ค์ง€์—์„œ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋„คํŠธ์›Œํฌ์—์„œ ์‚ฌ์šฉ์ž๋ฅผ ์ขŒ์ ˆ์‹œํ‚ฌ ๋ฟ์ž…๋‹ˆ๋‹ค.

@taion ์˜ˆ, ๋ชจ๋“  ์ข…์†์„ฑ์— ๋Œ€ํ•œ ์•”์‹œ์  ๋ฐฐ์น˜ ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•ด ์ ๊ทน์ ์œผ๋กœ ์‚ฌ๋žŒ๋“ค์„ ๋ฐ€์–ด๋ถ™์ด๋Š” ๊ฒƒ์€ ์˜๋„์ ์ž…๋‹ˆ๋‹ค. ์˜ˆ, ์ €๋Š” ๋‹ค์–‘ํ•œ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์— ๋Œ€ํ•œ ๊ด‘๋ฒ”์œ„ํ•œ ๊ฒฝํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ๊ฒฝํ—˜์— ๋”ฐ๋ฅด๋ฉด ๊ธฐ์กด ๊ธฐ๋ณธ๊ฐ’์˜ ๊ฒฐ๊ณผ๋Š” ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ์˜ ๊ตฌ์‹ ๋ฒ„์ „์„ ์ •๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ณ , CVE๋ฅผ ํ™•์ธ ํ•˜์ง€ ์•Š์œผ๋ฉฐ , ๋‹ค๋ฅธ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๊ฐ•์ œ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ๋•Œ๋งŒ ์—…๋ฐ์ดํŠธํ•˜๊ณ , ๊ทธ ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋งค์šฐ ๋†’๋‹ค๋Š”

๋”ฐ๋ผ์„œ pipenv ๊ฒฝ์šฐ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž ๋ฐ ๊ธฐ์กด ์„œ๋ฒ„ ์šด์˜ ์ฒด์ œ๋ฅผ ๋”ฐ๋ฅด๊ธฐ๋ณด๋‹ค๋Š” ๋ชจ๋ฐ”์ผ ๋ฐ ์ตœ์‹  ๋ฐ์Šคํฌํ†ฑ ์šด์˜ ์ฒด์ œ(์ฆ‰, ํšŒํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์˜๋„์ ์ธ ์กฐ์น˜๊ฐ€ ํ•„์š”ํ•œ ์ž๋™ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •)์—์„œ ์˜๋„์ ์œผ๋กœ ์‹ ํ˜ธ๋ฅผ ์ทจํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ชจ๋ฅธ๋‹ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ „ํ†ต์ ์ธ ๊ธฐ๋ณธ ํ–‰๋™์˜ ์ „ํ˜•์ ์ธ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ๊ทธ๊ฒƒ์„ ํ”ผํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

--keep-outdated (๋ฐ ํ•ด๋‹น PIPENV_KEEP_OUTDATED=1 ํ™˜๊ฒฝ ๋ณ€์ˆ˜)๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋” ์ˆ™๋ จ๋œ ๊ฐœ๋ฐœ์ž๊ฐ€ "๋‚ด๊ฐ€ ํ•˜๋Š” ์ผ์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉฐ, ๋‚ด ์ข…์†์„ฑ์„ ์ฑ…์ž„๊ฐ ์žˆ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‚˜๋ฅผ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค"๋ผ๊ณ  ๋ช…์‹œ์ ์œผ๋กœ ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

--selective-upgrade ๋ฏธํ•ด๊ฒฐ ์งˆ๋ฌธ์„ ์ œ๊ฑฐํ•˜๊ณ  ํ•ด๋‹น ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ œ์•ˆ๋œ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์„ค๋ช…์— ํฌํ•จ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ pipenv uninstall ์™€ ๊ด€๋ จ๋œ ์ƒˆ๋กœ์šด ๊ณต๊ฐœ ์งˆ๋ฌธ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. pipenv install ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ pipenv update ๋ฅผ ์•”์‹œํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์–ดํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ์ง€๋งŒ(@taion๊ณผ์˜ ์œ„์˜ ๋…ผ์˜์— ๋”ฐ๋ผ) pipenv uninstall ํ•˜๋Š” ๊ฒƒ์€ ์ €์—๊ฒŒ ํ›จ์”ฌ ๋œ ๋ฐฉ์–ด์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์ข…์†์„ฑ์„ ์ œ๊ฑฐํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค๋ฅธ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์—…๊ทธ๋ ˆ์ด๋“œ๋กœ ์ธํ•ด ์ž ์žฌ์ ์œผ๋กœ ์ƒˆ๋กœ์šด ์ „์ด ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ด์ƒํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ณต๊ฐœ ์งˆ๋ฌธ์—์„œ ์ž๋™ํ™”๋œ ์ข…์†์„ฑ ์—…๋ฐ์ดํŠธ ๋„๊ตฌ์˜ ์„ธ๊ณ„์—์„œ pipenv install --skip-lock ๋Œ€ํ•œ ์‚ฌ์šฉ์„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋ก€๊ฐ€ ์—†๋‹ค๋ฉด(์ƒ๊ฐํ•  ์ˆ˜ ์—†์Œ) ์ค‘๋ณต์œผ๋กœ ๊ฐ„์ฃผํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

np ๋Š” --no-package-lock (๋ฐ ์ด์— ์ƒ์‘ํ•˜๋Š” Yarn)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์•„์ด๋””์–ด๋Š” ์ž ๊ธˆ ํŒŒ์ผ์„ ๋ช…์‹œ์ ์œผ๋กœ ๋ฌด์‹œํ•˜๊ณ  ์ตœ์‹  ํ˜ธํ™˜ ๋ฒ”์œ„๋กœ ์ž ๊ธˆ ํ•ด์ œ๋œ ๋ชจ๋“  npm ์ข…์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŠน์ • ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” tox์˜ ์กด์žฌ(๋ฐ Python์šฉ np์™€ ๊ฐ™์€ ๊ฒƒ์„ ๊ตฌ์ถ•ํ•˜๋Š” ์–ด๋ ค์›€)๋ฅผ ๊ฐ์•ˆํ•  ๋•Œ ๋œ ๊ด€๋ จ์„ฑ์ด ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋„ ์ž ๊ธด ์ข…์†์„ฑ ์„ธํŠธ๋ฅผ ๋ชจ๋‘ ๊ฐ–๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ๋›ฐ์–ด๋“œ๋Š” ์‚ฌ๋žŒ๋“ค์ด ๊นจ์ง„ ๋นŒ๋“œ ํ™˜๊ฒฝ์„ ์ฒ˜๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ์‚ฌ๋žŒ๋“ค์ด ๋ฆด๋ฆฌ์Šค ์ „์— ์ตœ์‹  ํ˜ธํ™˜ ์ข…์†์„ฑ์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ํ…Œ์ŠคํŠธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ํ™•์‹คํžˆ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚˜์—๊ฒŒ ๋œ ๋ช…ํ™•ํ•ด์ง„ ๋ถ€๋ถ„์€ ํ•ด๋‹น ์ƒํ™ฉ์—์„œ ์ž ๊ธˆ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ๋‘๋Š” ์ด์ ์ž…๋‹ˆ๋‹ค(ํŠนํžˆ pipenv update ๋Š” ํ˜„์žฌ ํ•ด๋‹น ์˜ต์…˜์„ ์ œ๊ณต

  • ์ˆœ์ „ํžˆ CI์—์„œ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋ผ๋ฉด CI ์„œ๋ฒ„๋Š” git push ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ž ๊ธˆ ํŒŒ์ผ ์ˆ˜์ •์€ ๋‹ค๋ฅธ ๊ณณ์—์„œ๋Š” ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์†Œ์Šค ์ œ์–ด๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ๋กœ์ปฌ ์ž ๊ธˆ ํŒŒ์ผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์œ ์ง€ํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž ๊ธˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ์„ ์–ธ๋œ Pipfile ์ œ์•ฝ ์กฐ๊ฑด์„ ์™„์ „ํžˆ ์šฐํšŒํ•˜๋Š” pip install --upgrade <whatever> ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ์ดํ›„ ์ง€๊ธˆ, ์˜ต์…˜, ์˜๋ฏธ๊ฐ€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ•ด๋‹น pipenv ๋กœ ํ˜„์žฌ ์ด๋ฒคํŠธ pipenv --keep-outdated (๋‹น์‹ ์ด ๋ญ”๊ฐ€๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜์žˆ๋‹ค Pipfile ์ž๋™ ์—…๋ฐ์ดํŠธ ๋ชจ๋“  ๊ฒƒ๋“ค์—†์ด).

์ง€๊ธˆ์€ ๋ฏธํ•ด๊ฒฐ ์งˆ๋ฌธ์œผ๋กœ ๋‚จ๊ฒจ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค. pip lock --keep-outdated ๋ฐ pip install --keep-outdated ๊ฐ€ ์กด์žฌํ•˜๋ฉด ์ •๋‹ต์ด ๋” ๋ช…ํ™•ํ•ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ œ์•ˆ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—ฌ์ „ํžˆ [packages] ์™€ [dev-packages] ์‚ฌ์ด์˜ ๋ถˆ์ผ์น˜๋ฅผ ์ˆ˜์ •ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๊นŒ? ํŠนํžˆ, ์ด ๋ฌธ์ œ๋ฅผ ์–ธ๊ธ‰ํ•˜๋Š” #1220์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์—ˆ์ง€๋งŒ ์ œ์•ˆ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๊ทธ ๋ถˆ์ผ์น˜๋ฅผ ์–ด๋–ป๊ฒŒ ์ˆ˜์ •ํ• ์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด dev/non-dev ๋ถˆ์ผ์น˜๊ฐ€ #1220์— ์„ค๋ช…๋œ ๊ฒƒ๊ณผ ๋‹ค๋ฅด๋ฉฐ ํ•ด๋‹น ๋ฌธ์ œ๋Š” ๋ณ„๋„๋กœ ์กฐ์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

@matthijskooijman ์ƒ๋‹จ ๊ฒŒ์‹œ๋ฌผ์— ๋ช…์‹œ์ ์œผ๋กœ ๋ช…์‹œ๋˜์–ด ์žˆ์ง€๋Š” ์•Š์ง€๋งŒ https://github.com/pypa/pipenv/issues/1255#issuecomment -354585775(ํ˜„์žฌ ๊ฒŒ์‹œ๋ฌผ์—์„œ ์–ธ๊ธ‰๋จ)์—๋Š” ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ๋ช…์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. packages ๋ฐ dev-packages ์—์„œ "๋น„์ผ๊ด€์„ฑ์„ ๊ฐ์ง€(๋ฐ ํ•ด๊ฒฐ)"ํ•˜๋Š” ๋ฐฉ๋ฒ• ๋˜๋Š” ๋Œ€์•ˆ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚˜์—๊ฒŒ ๋ถˆ์ผ์น˜๊ฐ€ ํ•ด๊ฒฐ๋  ๊ฒƒ์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์˜๋„๋Š” ํ•ด๋‹น ๋ถˆ์ผ์น˜๊ฐ€ pipenv lock ๋‹จ๊ณ„์—์„œ ํ•ด๊ฒฐ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค( ๊ทธ๋Ÿฌ๋ฉด pipenv sync ๋Š” ์ž์ฒด ์ผ๊ด€๋œ ์ž ๊ธˆ ํŒŒ์ผ์„ ์ƒ์†ํ•ฉ๋‹ˆ๋‹ค).

(์ฐธ๊ณ : ์ด๊ฒƒ์€ ์ด์ „์— ๋ช…ํ™•ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ํ•ด๋‹น ๋‹จ๊ณ„๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ณ„๋„์˜ ๊ธ€๋จธ๋ฆฌ ๊ธฐํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.)

๋ฐฉ๊ธˆ CPython๊ณผ PyPy ๊ฐ„์— ๊ธฐ๋ณธ Python ๊ตฌํ˜„์„ ๋ณ€๊ฒฝํ•  ๋•Œ pipenv๊ฐ€ ์ž ๊ธˆ ํŒŒ์ผ์„ ์žฌ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„์ฐจ๋ ธ์Šต๋‹ˆ๋‹ค.

  1. pipenv install --python pypy venv ์ƒ์„ฑ ๋ฐ ์„ค์น˜
  2. ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์‚ญ์ œ
  3. pipenv install venv๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค๊ณ  ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค.
  4. ์ž ๊ธˆ ํŒŒ์ผ์ด ์žฌ์ƒ์„ฑ๋˜์ง€ ์•Š๊ณ  host-environment-markers ์„น์…˜์—๋Š” ์—ฌ์ „ํžˆ "platform_python_implementation": "PyPy"

@joshfriend ์‹ค์ œ๋กœ ์˜๋„์ ์ธ ๊ฒƒ์ด์ง€๋งŒ ํ˜„์žฌ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์ด์œ ์— ๋Œ€ํ•œ ์˜๊ฒฌ์€ https://github.com/pypa/pipenv/issues/857#issuecomment -368223561์„ ์ฐธ์กฐ

์ธ์ˆ˜ ์—†์ด pipenv ์„ค์น˜์— ๋Œ€ํ•œ ํ˜„์žฌ ๋™์ž‘์„ ์œ ์ง€ํ•˜์ง€๋งŒ ์ƒˆ๋กœ์šด ํ™˜๊ฒฝ์„ ์„ค์ •ํ•  ๋•Œ pipenv sync ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜๋„๋ก ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋Ÿฐ ์‹์œผ๋กœ pipenv install์€ ์„ค์น˜๋œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐ ์ฃผ๋กœ ์‚ฌ์šฉ๋จ)

์ด์ œ install ๊ฐ€ sync install ํ˜ธ์ถœํ•˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž๊ฐ€ install ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถ€์ŠคํŠธ๋žฉํ•˜๋„๋ก ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[ํŒจํ‚ค์ง€] ๋ฐ [๊ฐœ๋ฐœ ํŒจํ‚ค์ง€]๊ฐ€ ์„œ๋กœ ์ผ์น˜ํ•˜๋„๋ก ํ•ญ์ƒ pipenv ์ž ๊ธˆ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค(#1137์— ๋Œ€ํ•œ ํ•ด๊ฒฐ).

๋‚˜๋Š” ๋ฐฉ๊ธˆ ์ด๊ฒƒ์„ ์ฐ”๋ €๋‹ค https://github.com/pypa/pipenv/commit/fdebdc3c423dce83c13d4e384acb703291109f1e

ํ™•์‹คํžˆ ๊ตฌํ˜„ ์„ธ๋ถ€ ์ •๋ณด๊ฐ€ ์žˆ์ง€๋งŒ(์˜ˆ: ๊ฐœ๋ฐœ ํŒจํ‚ค์ง€์—๋Š” ์กด์žฌํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ํŒจํ‚ค์ง€์—๋Š” ์—†๋Š” ํ•˜์œ„ ๋Ž์€ ์ œ๊ฑฐ๋˜์ง€ ์•Š์Œ) ํ™•์‹คํ•œ ๊ฐœ์„  ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

๊ตฌํ˜„ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/pypa/pipenv/commit/daa56e1290b259af8e2410b2f4d799ca71601a37

@kennethreitz ์ƒˆ๋กœ ์„ค์น˜ํ•˜๋Š” ๊ฒฝ์šฐ pipenv install ์ž˜ ์ฝ๋Š” ๊ฒƒ์— ๊ด€ํ•œ ์ข‹์€ ์ : ์žฌ๋™๊ธฐํ™”์˜ ๊ฒฝ์šฐ์—๋งŒ ์ด์ƒํ•˜๊ฒŒ ์ฝํ˜€ ๊ฒฐ๊ตญ ๋ฒ„์ „์„ ์ผ์น˜์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฐ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. pipenv sync ์ถ”์ฒœ์— ๋Œ€ํ•œ ๊ธ€๋จธ๋ฆฌ ๊ธฐํ˜ธ๋ฅผ ์™„๋ฃŒ๋กœ ํ‘œ์‹œํ•˜๊ณ  ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ธฐ๋กœ ๊ฒฐ์ •ํ•œ ๋ถ€๋ถ„์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

#1137 ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ตฌํ˜„ํ•˜๋ฉด #966์„ ํ•จ๊ป˜ ๊ตฌํ˜„ํ•˜๋Š” --keep-outdated ๋ฐ --selective-upgrade ๊ฐœ์„  ์‚ฌํ•ญ๋งŒ ๋‚จ์Šต๋‹ˆ๋‹ค.

# 1486์— ๋Œ€ํ•œ ์„ ํƒ์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•, ์ฃผ์–ด์ง„ --selective-upgrade ๊ธฐ๋Šฅ์„ ์ „๋‹ฌํ•˜๋Š” ํ•„์š”์„ฑ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค --upgrade-strategy=only-if-needed ๊ธฐ๋ณธ์— pip install ์„ค์ •์— ์ถ”๊ฐ€๋กœ ํ˜ธ์ถœ keep_outdated ํ•  ๋•Œ ์˜ค๋ž˜๋œ ์ž ๊ธˆ ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

์ง€๊ธˆ --keep-outdated ์ค‘ :)

$ pipenv lock --keep-outdated ์ด์ œ ๋ฒ„์ „ ๋ฒˆํ˜ธ๊ฐ€ ๊ณ ์ •๋˜์ง€ ์•Š๋Š” ํ•œ ์ด์ „ ์ž ๊ธˆ ํŒŒ์ผ์˜ ๋ชจ๋“  ๋ฒ„์ „ ๋ฒˆํ˜ธ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ถ”๊ฐ€ Pipfile ๊ตฌ์„ฑ ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค(ํ˜„์žฌ allow_prereleases ): keep_outdated :

[pipenv]

keep_outdated = true

--selective-upgrade ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ›„์ž! #857์—์„œ ์•„์ง ๋‹ค๋ฃจ์ง€ ์•Š์€ ์ถ”๊ฐ€ ์ œํ•œ ์‚ฌํ•ญ์ด 10.1 ๋ฆด๋ฆฌ์Šค ์ดํ›„์— ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋กœ ๋ณด๊ณ ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด๊ฒƒ์„ ๋‹ซ์Šต๋‹ˆ๋‹ค. :)

๋ฒ„๊ทธ์— ๋Œ€ํ•ด ์ž‘์—… ์ค‘์ด์ง€๋งŒ ๊ณง ํ•ด๊ฒฐ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฒฐ์ •๋œ

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰