Readthedocs.org: ํ•ํŒŒ์ผ ์ง€์›

์— ๋งŒ๋“  2017๋…„ 10์›” 23์ผ  ยท  54์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: readthedocs/readthedocs.org

๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜์—ฌ ์„ ํ˜ธ Pipfile ํ†ตํ•ด requirements.txt . ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜๋ ค๋ฉด ์ด ํŒŒ์ผ ํ˜•์‹์„ ์ง€์›ํ•˜์‹ญ์‹œ์˜ค.

Accepted Feature

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

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„, ๋จผ์ € ์ด ํ”„๋กœ์ ํŠธ์—์„œ ์—ฌ๋Ÿฌ๋ถ„์ด ํ•˜๋Š” ๋ชจ๋“  ์ผ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค :smiley:

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

๋‚˜๋Š” pipenv ๋ฌธ์„œ์˜ ์ด ์„น์…˜์— ์ œ๊ณต๋œ ์ •๋ณด๋ฅผ ์ฃผ์š” ์ฐธ์กฐ ์ง€์ ์œผ๋กœ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์— ๋‚˜์—ด๋œ ์‚ฌ์šฉ ์‚ฌ๋ก€์™€ ์ง€์นจ์„ ์ˆ˜์šฉํ•˜๋ฉด ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŒ์กฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

RTD์˜ ์„ค์น˜ ๊ณผ์ •

๋”ฐ๋ผ์„œ ํ˜„์žฌ virtualenv๊ฐ€ ์ƒ์„ฑ๋œ ํ›„ ์„ค์น˜ ํ”„๋กœ์„ธ์Šค์—๋Š” ์„ธ ๋‹จ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. RTD์˜ ํ•ต์‹ฌ ์š”๊ตฌ ์‚ฌํ•ญ ์„ค์น˜
  2. pip๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ requirements.txt ํŒŒ์ผ์—์„œ ์‚ฌ์šฉ์ž ์š”๊ตฌ ์‚ฌํ•ญ ์„ค์น˜(์„ ํƒ์  ๋‹จ๊ณ„)
  3. pip install . ๋˜๋Š” python setup.py install --force ํŒจํ‚ค์ง€ ์ž์ฒด ์„ค์น˜(์„ ํƒ ์‚ฌํ•ญ)

pipenv๊ฐ€ ์ด๋Ÿฌํ•œ ๋‹จ๊ณ„์— ์ ํ•ฉํ•œ ๋ฐฉ๋ฒ•

pipenv ์ž์ฒด์˜ ์„ค์น˜๋Š” ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. YAML ๊ตฌ์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์กฐ๊ฑด๋ถ€์—ฌ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ pipenv์˜ ์ผ๋ถ€(๋˜๋Š” ์•„๋งˆ๋„ "๋Œ€๋ถ€๋ถ„์˜") ์‚ฌ์šฉ๋ฒ•์€ ์‹ค์ œ๋กœ 2๋‹จ๊ณ„์™€ 3๋‹จ๊ณ„๋ฅผ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ํ”„๋กœ์ ํŠธ๊ฐ€ Pipfile์— -e . ๋˜๋Š” ์ด์— ์ƒ์‘ํ•˜๋Š” ์‚ฌ์–‘์„ ๊ฐ–๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€์˜ ํ•˜์œ„ ์ข…์†์„ฑ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค).

๊ทธ๋Ÿฌ๋‚˜ ์œ„์— ๋งํฌ๋œ ๋ฌธ์„œ์— ์ง€์ •๋œ ๊ฒƒ์ฒ˜๋Ÿผ Pipfiles๋Š” ํ”„๋กœ์ ํŠธ์˜ install_requires ์˜์กด ํ•˜์ง€ ์•Š๊ณ  ์ž์ฒด์ ์œผ๋กœ ์ข…์†์„ฑ์„ ๊ด€๋ฆฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ pipenv๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 2๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ 3๋‹จ๊ณ„์— pip install . ๋˜๋Š” python setup.py install ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

pipenv install ์ธ์ˆ˜

์‚ฌ์šฉ์ž์—๊ฒŒ ์ž์œ ๋ฅผ ์ฃผ๊ณ  ์ƒˆ๋กœ์šด pipenv install ํ”Œ๋ž˜๊ทธ์— ๋Œ€ํ•œ ๊ตฌ์„ฑ์„ ๋ฏธ๋ž˜์—๋„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž๊ฐ€ YAML์—์„œ ๋ฌธ์ž์—ด๋กœ ์‚ฌ์šฉํ•˜๋ ค๋Š” ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ pipenv๊ฐ€ ๋‹ค๋ฅธ virtualenv๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋„๋ก --system ์˜๊ตฌ ํ”Œ๋ž˜๊ทธ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ pipenv ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฏธ ๊ฐ€์ƒ ํ™˜๊ฒฝ ์„ค์ •์„์œ„ํ•œ ์‚ฌ๋ž‘์Šค๋Ÿฌ์šด ๊ฒฌ๊ณ ํ•œ ์„ค๊ณ„ ๋ฐ API ๊ฐ€์ง€๊ณ  ๋ถˆํ•„์š” virtualenv , ๊ทธ๋ฆฌ๊ณ  pipenv ์˜ ๊ฐ€์ƒ ํ™˜๊ฒฝ ๊ด€๋ฆฌ๊ฐ€ ๋” ์ตœ์ข… ์‚ฌ์šฉ์ž QoL ๊ธฐ๋Šฅ.

๊ธฐ๋ณธ ๋™์ž‘์ด Pipfile.lock ์—์„œ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— --ignore-pipfile ๋Š” ๋ถˆํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์–ด๋–ค ๊ฒฝ์šฐ์—๋„ ํŒจํ‚ค์ง€ ๋˜๋Š” ์š”๊ตฌ ์‚ฌํ•ญ ํŒŒ์ผ์„ pipenv install ๋Œ€ํ•œ ์ธ์ˆ˜๋กœ ์ง€์ •ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Pipfile์— ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ฒฐ์ •์ ์œผ๋กœ ๋‹ค์‹œ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ๋ ˆ์ด์•„์›ƒ

๋”ฐ๋ผ์„œ ์œ„์˜ ์š”์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ๋‚ด ์ ‘๊ทผ ๋ฐฉ์‹์€ YAML์— ๋‹ค์Œ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

pipenv_install: True|False
pipenv_install_opts: OPTIONS

ํŽธ์ง‘: ๋‘ ๋ฒˆ์งธ๋กœ ์ด๋Ÿฌํ•œ ์˜ต์…˜์„ pipenv ํ‚ค ์•„๋ž˜์˜ ํ•˜์œ„ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

python ํ‚ค์— ํฌํ•จํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๊ฐ€์žฅ ์œ ์‚ฌํ•œ requirements_file ํ‚ค์™€ ๊ฐ™์€ ์ˆ˜์ค€์— ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

pipenv๋ฅผ ์‚ฌ์šฉํ•œ ์„ค์น˜ ์š”์•ฝ

  1. pipenv_install ๊ฐ€ True์ธ ๊ฒฝ์šฐ pipenv๋ฅผ ํฌํ•จํ•˜์—ฌ pip๋กœ RTD์˜ ํ•ต์‹ฌ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  2. ์„ ํƒ์ ์œผ๋กœ pip๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ requirements.txt ํŒŒ์ผ์—์„œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  3. ์„ ํƒ์ ์œผ๋กœ pipenv install --system {opts}
  4. ์„ ํƒ์ ์œผ๋กœ pip install .[extras] ๋˜๋Š” python setup.py install --force ์ค‘ ํ•˜๋‚˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ๋‘˜ ๋‹ค ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๊ด€์ ์ด ์žˆ๊ฑฐ๋‚˜ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”. ์Šค๋งˆ์ผ๋ฆฌ:

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

@Stibbons๋‹˜ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ด์— ๋Œ€ํ•œ PR์„ ์ œ์ถœํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๊ธฐ์—ฌ๋ฅผ ์–ธ์ œ๋‚˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” pipenv์— ๋Œ€ํ•œ ์ง€์›์œผ๋กœ ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ–ˆ๋Š”๋ฐ pip install์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. readthedocs.yml ํŒŒ์ผ์„ ํ†ตํ•ด ์˜ต์…˜์„ ์ œ๊ณตํ•˜๊ณ  ์‹ถ์„ ๊ฒƒ์ด๋ฏ€๋กœ ๋‹ค์Œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • [ ] doc_builder/python_environments.py ์—์„œ pipenv์— ๋Œ€ํ•œ ์กฐ๊ฑด๋ถ€ ํ˜ธ์ถœ
  • [ ] readthedocs-build ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ readthedocs.yml ์ง€์›
  • [ ] ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ readthedocs.yml ์ง€์›

์˜ˆ, ๊ทธ๊ฒƒ์€ pip(์‹ค์ œ๋กœ๋Š” ๋ž˜ํผ)์˜ ์ง์ ‘์ ์ธ ๋Œ€์ฒด์ด๋ฉฐ pipenv install thispackage ํ•˜๊ณ  virtualenv์— ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ (pew ์‚ฌ์šฉ) ๊ทธ์— ๋”ฐ๋ผ Pipfile์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ReadTheDocs์˜ ๊ฒฝ์šฐ pipenv install --dev ํ•˜๊ณ  lib๊ฐ€ ํ™˜๊ฒฝ์— ์„ค์น˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ณดํ†ต -e . ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ ์ค‘์ธ ๋‚ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ virtualenv์— ์ฃผ์ž…ํ•˜์ง€๋งŒ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ pipenv install --dev --ignore-pipfile ํ•ฉ๋‹ˆ๋‹ค. --ignore-pipfile ์—†์œผ๋ฉด pipenv ๋Š” Pipfile ์˜ ํŒจํ‚ค์ง€๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ ค๊ณ  ํ•  ๋ฟ ์‹ค์ œ๋กœ๋Š” ๊ฒฐ์ •์  ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. https://github.com/kennethreitz/pipenv/issues/954#issuecomment -338777638์„ ์ฐธ์กฐ

์ฐธ์œผ๋กœ

๋‚˜๋Š” ์ด๋ฏธ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์— pipenv๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์–ด๋Š ์ •๋„ ์ต์ˆ™ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ์‹ค์ œ๋กœ ๊ธฐ์กด virtualenvs๋ฅผ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด --system ๋„ ์›ํ•œ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•œ ํŠน๋ณ„ํ•œ ์ €์žฅ์†Œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ venv๊ฐ€ ๋นŒ๋“œ ๊ฐ„์— ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

@tuukkamustonen ์ด๊ฒƒ์€ ์•ฝ๊ฐ„ ํ˜ผ๋ž€

๊ฐ€์žฅ ์ •ํ™•ํ•œ ๊ฒƒ์€ pipfile.lock์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด --ignore-pipfile , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์ด๋Ÿฌํ•œ ์˜ต์…˜ ์ค‘ ์ผ๋ถ€๋Š” readthedocs.yml์„ ํ†ตํ•ด ์ถ”๊ฐ€/ํ—ˆ์šฉ๋œ ์žฌ์ •์˜๊ฐ€ ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ --dev ๋Š” ๊ทธ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

์˜ ๊ฒฝ์šฐ a๋Š” requirements.txt , ์šฐ๋ฆฌ๋Š” ๊ทธ๋ƒฅ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค pipenv install ๋Œ€์‹  pip install

์–‘์ชฝ ๋‹ค ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. requirements.txt๋ฅผ ๊ณ ์ •ํ•˜๋ฉด(์˜ˆ: pip-tools ์‚ฌ์šฉ) ์ž ๊ธˆ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ๋•Œ์ฒ˜๋Ÿผ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
๋ฒ”์œ„ ๋˜๋Š” ๋ฒ„์ „ ์—†์ด ๋ฒ„์ „๋งŒ ์„ค๋ช…ํ•˜๋ฉด Pipfile์ฒ˜๋Ÿผ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
์ž ๊ธˆ ํŒŒ์ผ์€ ์‹œ์Šคํ…œ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ ๋งˆ์ปค(์˜ˆ: ยซ python_version < 3 ยป)๊ฐ€ ์—†์ง€๋งŒ ๋‘˜ ๋‹ค ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋Š” 'pipenv install โ€”dev โ€”system'์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ 'pip install -r requirements.txt -r requirements-dev.txt'์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@agjohnson ์ €๋„ pipenv install ์‹คํ–‰ํ•˜๋ฉด Pipfile.lock ๋”ฐ๋ฅด์ง€ ์•Š๊ณ  ๋Œ€์‹  Pipfile ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ ๋ฒ„์ „์œผ๋กœ ๊ณ ์ •ํ•˜์ง€ ์•Š์€ ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•œ ๋‹ค์Œ _update_ Pipfile.lock . ๋”ฐ๋ผ์„œ pip-compile ๋ฐ pip-sync (pip-tools ํŒจํ‚ค์ง€์—์„œ)๊ฐ€ ๊ฒฐํ•ฉ๋œ ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์กฐ๊ธˆ ํ˜ผ๋ž€์Šค๋Ÿฝ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์ •ํ™•ํ•œ ๊ฒƒ์€ pipfile.lock์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด --ignore-pipfile, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์˜ˆ, ๊ฒฐ์ •์  ๋นŒ๋“œ๋ฅผ ๋”ฐ๋ฅด๋Š” ๊ฒฝ์šฐ ์ž ๊ธˆ ํŒŒ์ผ์„ ๋”ฐ๋ผ์•ผ ํ•˜๊ณ  --ignore-pipfile ์ฃผ์–ด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์–ด๋–ป๊ฒŒ ์˜๋ฏธ๊ฐ€ ์žˆ์„์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  pipenv update pip-sync ์™€ ๊ฐ™์€ ํŒจํ‚ค์ง€๋ฅผ ์ œ๊ฑฐ/์„ค์น˜ํ•˜์ง€๋งŒ --ignore-pipfile ์˜ต์…˜์ด ์—†์Šต๋‹ˆ๋‹ค... ํ .

์ž ๊ธˆ ํŒŒ์ผ์€ ์‹œ์Šคํ…œ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ ๋งˆ์ปค(์˜ˆ: ยซ python_version < 3 ยป)๊ฐ€ ์—†์ง€๋งŒ ๋‘˜ ๋‹ค ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ข‹์€ ์•Œ๋ฆผ์ž…๋‹ˆ๋‹ค. pip-tools ๋˜๋Š” pipenv(์•„๋ž˜์—์„œ pip-tools ์‚ฌ์šฉ)๋Š” "๋ฒ”์šฉ" ์ž ๊ธˆ ํŒŒ์ผ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Windows์˜ python 3.6์—์„œ ์ž ๊ธˆ ํŒŒ์ผ์„ ๋งŒ๋“  ๋‹ค์Œ Linux์˜ 3.4์—์„œ ์‹คํ–‰ํ•˜๋ฉด ์ž ๊ธˆ ํŒŒ์ผ์ด 3.6/Windows ํ™˜๊ฒฝ์„ ์˜ˆ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/kennethreitz/pipenv/issues/857 ๋ฐ https://github.com/jazzband/pip-tools/issues/563์„ ์ฐธ์กฐํ•˜์„ธ์š”.

pipfile.lock์„ ์ฒดํฌ์ธํ•˜์ง€ ์•Š๋Š” ํ”„๋กœ์ ํŠธ์—์„œ pipfile์„ ๋ฌด์‹œํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

์ด๋Ÿฌํ•œ ํ”„๋กœ์ ํŠธ๋Š” ๊ฒฐ์ •์  ๋นŒ๋“œ๋ฅผ ์–ป์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๊ดœ์ฐฎ์ง€๋งŒ ๋ฌธ์„œํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. pipenv์˜ ์ฃผ์š” ์ด์  ์ค‘ ํ•˜๋‚˜๋Š” ๊ฒฐ์ •๋ก ์  ๋นŒ๋“œ๋ฅผ ์–ป๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋‹จ์ˆœํ•œ requirements.txt ๋ณด๋‹ค ๊ฐœ์„ ). ๊ทธ๋Ÿฌ๋‚˜ ๋งํ–ˆ๋“ฏ์ด ์š”๊ตฌ ์‚ฌํ•ญ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๊ทธ๊ฒƒ์„ ์ธ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

requirements.txt์˜ ๊ฒฝ์šฐ pip install ๋Œ€์‹  pipenv install์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

pipenv requirements.txt ์Šคํƒ€์ผ ํŒŒ์ผ์„ ์ฝ์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Pipfile ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ด์ „ ํ–‰๋™์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ ์ข‹์€ ์•Œ๋ฆผ์ž…๋‹ˆ๋‹ค. pip-tools ๋˜๋Š” pipenv(์•„๋ž˜์—์„œ pip-tools ์‚ฌ์šฉ)๋Š” "๋ฒ”์šฉ" ์ž ๊ธˆ ํŒŒ์ผ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Windows์˜ python 3.6์—์„œ ์ž ๊ธˆ ํŒŒ์ผ์„ ๋งŒ๋“  ๋‹ค์Œ Linux์˜ 3.4์—์„œ ์‹คํ–‰ํ•˜๋ฉด ์ž ๊ธˆ ํŒŒ์ผ์ด 3.6/Windows ํ™˜๊ฒฝ์„ ์˜ˆ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. kennethreitz/pipenv#857 ๋ฐ jazzband/pip-tools#563์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์•„ ์˜ˆ, Pipfile์„ ๋ฌด์‹œํ•˜๊ณ  Pipfile.lock์— ์˜์กดํ•˜๋Š” ๊ฒƒ์ด ์˜ต์…˜์ด์–ด์•ผ ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊บผ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ”์šฉ ์ž ๊ธˆ ํŒŒ์ผ์ด ์—†์œผ๋ฉด ํ™˜๊ฒฝ์ด ๋นŒ๋“œ ์ด๋ฏธ์ง€์™€ ๋™์ผํ•œ OS ๋˜๋Š” Python ๋ฒ„์ „์ด๋ผ๊ณ  ๋ณด์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

pipenv๊ฐ€ requirements.txt ์Šคํƒ€์ผ ํŒŒ์ผ์„ ์ฝ์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Pipfile์ด ์—†๋Š” ๊ฒฝ์šฐ ์ด์ „ ๋™์ž‘์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

Pipfile์ด ์—†๊ณ  requirements.txt๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ pipenv install ๊ฐ€ ์ž๋™์œผ๋กœ ์ด๋ฅผ Pipfile๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํŒŒ์ผ ์ด๋ฆ„์ด foo.txt ๊ฒฝ์šฐ pipenv install -r foo.txt ๋Š” ์ž„์˜๋กœ ๋ช…๋ช…๋œ ํŒŒ์ผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. RTD์—์„œ ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ชจ๋“œ์ž…๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ.txt์—์„œ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฉฐ, ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์ž‘์—…์— ๋”ฐ๋ผ ์žฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ท€์ฐฎ๊ฒŒ ํ•˜์ง€ ์•Š๊ณ  --dev ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋Œ€๋ถ€๋ถ„ ReadTheDoc์ด ํŠธ๋ฆฌ๊ฑฐ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋™์‹œ์— ํŠธ๋ž˜๋น„์Šค๋ณด๋‹ค.

๋‚˜์ค‘์— ๋ฒ”์šฉ ์ž ๊ธˆ ํŒŒ์ผ์ด ํ•ด๊ฒฐ๋˜๋ฉด ์ด๊ฒƒ์€ Rtd์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๊ฒƒ์€ ํŠธ๋ž˜๋น„์Šค ๋นŒ๋“œ์—์„œ๋ณด๋‹ค "์ค‘์š”ํ•˜์ง€" ์•Š์Šต๋‹ˆ๋‹ค(์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ์‹ค์ œ ํœ ์ด ์•„๋‹ˆ๋ผ ๋ฌธ์„œ์ด๊ธฐ ๋•Œ๋ฌธ์—). ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์ด ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŠธ๋ž˜๋น„์Šค.

๋˜๋Š” ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ค์น˜ ๋ผ์ธ( pip install -r requirements.txt ๋˜๋Š” pipenv install --dev )์„ ์ž‘์„ฑํ•˜๋„๋ก ํ•˜๋ฉด ๋” ๋‹ค์–‘ํ•œ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์˜ ์ƒํƒœ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ œ๊ฐ€ ๋„์™€๋“œ๋ฆด ์ˆ˜ ์žˆ๋Š” ์ผ์ด ์žˆ์„๊นŒ์š”?
๊ฐ์‚ฌ ํ•ด์š”!

์–˜๋“ค ์•„.
์†Œ์‹์ด ์žˆ๋‚˜์š”?

์—…๋ฐ์ดํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์›ํ•œ๋‹ค๋ฉด ์ด ์ž‘์—…์„ ์ž์œ ๋กญ๊ฒŒ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค.

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„, ๋จผ์ € ์ด ํ”„๋กœ์ ํŠธ์—์„œ ์—ฌ๋Ÿฌ๋ถ„์ด ํ•˜๋Š” ๋ชจ๋“  ์ผ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค :smiley:

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

๋‚˜๋Š” pipenv ๋ฌธ์„œ์˜ ์ด ์„น์…˜์— ์ œ๊ณต๋œ ์ •๋ณด๋ฅผ ์ฃผ์š” ์ฐธ์กฐ ์ง€์ ์œผ๋กœ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์— ๋‚˜์—ด๋œ ์‚ฌ์šฉ ์‚ฌ๋ก€์™€ ์ง€์นจ์„ ์ˆ˜์šฉํ•˜๋ฉด ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŒ์กฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

RTD์˜ ์„ค์น˜ ๊ณผ์ •

๋”ฐ๋ผ์„œ ํ˜„์žฌ virtualenv๊ฐ€ ์ƒ์„ฑ๋œ ํ›„ ์„ค์น˜ ํ”„๋กœ์„ธ์Šค์—๋Š” ์„ธ ๋‹จ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. RTD์˜ ํ•ต์‹ฌ ์š”๊ตฌ ์‚ฌํ•ญ ์„ค์น˜
  2. pip๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ requirements.txt ํŒŒ์ผ์—์„œ ์‚ฌ์šฉ์ž ์š”๊ตฌ ์‚ฌํ•ญ ์„ค์น˜(์„ ํƒ์  ๋‹จ๊ณ„)
  3. pip install . ๋˜๋Š” python setup.py install --force ํŒจํ‚ค์ง€ ์ž์ฒด ์„ค์น˜(์„ ํƒ ์‚ฌํ•ญ)

pipenv๊ฐ€ ์ด๋Ÿฌํ•œ ๋‹จ๊ณ„์— ์ ํ•ฉํ•œ ๋ฐฉ๋ฒ•

pipenv ์ž์ฒด์˜ ์„ค์น˜๋Š” ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. YAML ๊ตฌ์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์กฐ๊ฑด๋ถ€์—ฌ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ pipenv์˜ ์ผ๋ถ€(๋˜๋Š” ์•„๋งˆ๋„ "๋Œ€๋ถ€๋ถ„์˜") ์‚ฌ์šฉ๋ฒ•์€ ์‹ค์ œ๋กœ 2๋‹จ๊ณ„์™€ 3๋‹จ๊ณ„๋ฅผ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ํ”„๋กœ์ ํŠธ๊ฐ€ Pipfile์— -e . ๋˜๋Š” ์ด์— ์ƒ์‘ํ•˜๋Š” ์‚ฌ์–‘์„ ๊ฐ–๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€์˜ ํ•˜์œ„ ์ข…์†์„ฑ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค).

๊ทธ๋Ÿฌ๋‚˜ ์œ„์— ๋งํฌ๋œ ๋ฌธ์„œ์— ์ง€์ •๋œ ๊ฒƒ์ฒ˜๋Ÿผ Pipfiles๋Š” ํ”„๋กœ์ ํŠธ์˜ install_requires ์˜์กด ํ•˜์ง€ ์•Š๊ณ  ์ž์ฒด์ ์œผ๋กœ ์ข…์†์„ฑ์„ ๊ด€๋ฆฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ pipenv๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 2๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ 3๋‹จ๊ณ„์— pip install . ๋˜๋Š” python setup.py install ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

pipenv install ์ธ์ˆ˜

์‚ฌ์šฉ์ž์—๊ฒŒ ์ž์œ ๋ฅผ ์ฃผ๊ณ  ์ƒˆ๋กœ์šด pipenv install ํ”Œ๋ž˜๊ทธ์— ๋Œ€ํ•œ ๊ตฌ์„ฑ์„ ๋ฏธ๋ž˜์—๋„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž๊ฐ€ YAML์—์„œ ๋ฌธ์ž์—ด๋กœ ์‚ฌ์šฉํ•˜๋ ค๋Š” ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ pipenv๊ฐ€ ๋‹ค๋ฅธ virtualenv๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋„๋ก --system ์˜๊ตฌ ํ”Œ๋ž˜๊ทธ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ pipenv ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฏธ ๊ฐ€์ƒ ํ™˜๊ฒฝ ์„ค์ •์„์œ„ํ•œ ์‚ฌ๋ž‘์Šค๋Ÿฌ์šด ๊ฒฌ๊ณ ํ•œ ์„ค๊ณ„ ๋ฐ API ๊ฐ€์ง€๊ณ  ๋ถˆํ•„์š” virtualenv , ๊ทธ๋ฆฌ๊ณ  pipenv ์˜ ๊ฐ€์ƒ ํ™˜๊ฒฝ ๊ด€๋ฆฌ๊ฐ€ ๋” ์ตœ์ข… ์‚ฌ์šฉ์ž QoL ๊ธฐ๋Šฅ.

๊ธฐ๋ณธ ๋™์ž‘์ด Pipfile.lock ์—์„œ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— --ignore-pipfile ๋Š” ๋ถˆํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์–ด๋–ค ๊ฒฝ์šฐ์—๋„ ํŒจํ‚ค์ง€ ๋˜๋Š” ์š”๊ตฌ ์‚ฌํ•ญ ํŒŒ์ผ์„ pipenv install ๋Œ€ํ•œ ์ธ์ˆ˜๋กœ ์ง€์ •ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Pipfile์— ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ฒฐ์ •์ ์œผ๋กœ ๋‹ค์‹œ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ๋ ˆ์ด์•„์›ƒ

๋”ฐ๋ผ์„œ ์œ„์˜ ์š”์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ๋‚ด ์ ‘๊ทผ ๋ฐฉ์‹์€ YAML์— ๋‹ค์Œ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

pipenv_install: True|False
pipenv_install_opts: OPTIONS

ํŽธ์ง‘: ๋‘ ๋ฒˆ์งธ๋กœ ์ด๋Ÿฌํ•œ ์˜ต์…˜์„ pipenv ํ‚ค ์•„๋ž˜์˜ ํ•˜์œ„ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

python ํ‚ค์— ํฌํ•จํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๊ฐ€์žฅ ์œ ์‚ฌํ•œ requirements_file ํ‚ค์™€ ๊ฐ™์€ ์ˆ˜์ค€์— ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

pipenv๋ฅผ ์‚ฌ์šฉํ•œ ์„ค์น˜ ์š”์•ฝ

  1. pipenv_install ๊ฐ€ True์ธ ๊ฒฝ์šฐ pipenv๋ฅผ ํฌํ•จํ•˜์—ฌ pip๋กœ RTD์˜ ํ•ต์‹ฌ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  2. ์„ ํƒ์ ์œผ๋กœ pip๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ requirements.txt ํŒŒ์ผ์—์„œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  3. ์„ ํƒ์ ์œผ๋กœ pipenv install --system {opts}
  4. ์„ ํƒ์ ์œผ๋กœ pip install .[extras] ๋˜๋Š” python setup.py install --force ์ค‘ ํ•˜๋‚˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ๋‘˜ ๋‹ค ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๊ด€์ ์ด ์žˆ๊ฑฐ๋‚˜ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”. ์Šค๋งˆ์ผ๋ฆฌ:

@Tobotimus ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. https://github.com/orgs/rtfd/projects/2 ์˜ v2๋ฅผ ์ˆ˜ํ–‰ ์ค‘์ด๋ฉฐ ์ด๊ฒƒ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@stsewd ์•„ YAML ํŒŒ์ผ ์™„๋ฃŒ ์ด์ •ํ‘œ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ์ƒˆ๋กญ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ์ „ํžˆ ๋‹ค์†Œ ๋น„ํ‹€๊ฑฐ๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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

rtd-build repo๋ฅผ readthedocs.org repo https://github.com/rtfd/readthedocs.org/pull/4242๋กœ ์˜ฎ๊ธฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋ช‡ ๊ฐ€์ง€ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. https://docs.readthedocs.io/en/latest /design/yaml-file.html ์ด๋ฉฐ ์ด๊ฒƒ์€ v2 https://github.com/rtfd/readthedocs.org/blob/master/readthedocs/rtd_tests/fixtures/spec/v2/schema์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์Šคํ‚ค๋งˆ์˜ ์ผ์ข…์ž…๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. #4254์˜ ์ ‘๊ทผ ๋ฐฉ์‹์€ python ํ‚ค ์•„๋ž˜์— pipenv ์„น์…˜์„ ๋ฐฐ์น˜ํ•˜๊ธฐ rtd-build repo์šฉ์œผ๋กœ ์ค€๋น„ํ•œ ํŒจ์น˜ ์ž…๋‹ˆ๋‹ค. pipenv PR์„ ๊ณ„์†ํ•˜๊ธฐ ์ „์— #4242๊ฐ€ ๋ณ‘ํ•ฉ๋˜๊ณ  V2 ๊ตฌ์„ฑ ํŒŒ์„œ์—์„œ ๋” ๋งŽ์€ ์ง„ํ–‰์ด ์ด๋ฃจ์–ด์ง€๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆด ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

ํฌํŒ… ํ”„๋กœ์„ธ์Šค๋ฅผ ์™„๋ฃŒํ•˜๋ ค๋ฉด ๋” ๋งŽ์€ ์ž‘์—…์ด ์žˆ์œผ๋ฏ€๋กœ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋จผ์ € ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ readthedocs_build๊ฐ€ ๋™๊ฒฐ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํฌํŒ…๋˜๋ฉด PR์„ ๋‹ค์‹œ ์ž‘์—…ํ•˜์—ฌ ์—ฌ๊ธฐ์— ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ๋กœ์„œ๋Š” v2 ์Šคํ‚ค๋งˆ ์‚ฌ์–‘ ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ณ„๋„์˜ PR์ด ์‹œ์ž‘ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ํ…Œ์ŠคํŠธ์™€ ์Šคํ‚ค๋งˆ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
https://github.com/rtfd/readthedocs.org/blob/master/readthedocs/rtd_tests/fixtures/spec/v2/schema.yml
https://github.com/rtfd/readthedocs.org/blob/master/readthedocs/rtd_tests/tests/test_build_config.py

์ด๊ฒƒ์€ ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ๋ฐ ๊ทผ๊ฑฐ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ์œ„์น˜์ž…๋‹ˆ๋‹ค.

์ฆ‰๊ฐ์ ์ธ ํ”ผ๋“œ๋ฐฑ์€ pipenv.options ๋…ธ์ถœ์„ ์ข‹์•„ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋„๊ตฌ์—์„œ๋Š” ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ  ํŠน์ • ์˜ต์…˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š”์ด ๋ชจ๋“  ๋ฏธ๋งŒ์ด์–ด์•ผ ๋™์˜ python.pipenv ํ‚ค, ๊ทธ๋Ÿฌ๋‚˜ ์•„๋งˆ ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ๋ณ€๊ฒฝํ•ด์•ผ python.install ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด pipen ๋Œ€์‹  pip .

ํŽธ์ง‘: cc @Tobotimus , ๋˜ํ•œ ๊ธฐ์—ฌ์— ๋Œ€ํ•ด ๐ŸŽ‰! ํฐ ํ”„๋กœ์ ํŠธ์˜ ์ค‘๊ฐ„์— PR ์ฐฉ๋ฅ™ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค

@agjohnson ์ •๋ณด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๊ทธ๋ฆฌ๊ณ  ํ”ผ๋“œ๋ฐฑ๋„ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. pipenv.options ๋…ธ์ถœ์ด ๋‚˜๋จธ์ง€ ์Šคํ‚ค๋งˆ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ์ง€๊ธˆ ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ํŠน์ • ์˜ต์…˜์€ --dev (๊ฐœ๋ฐœ ์ข…์†์„ฑ ์„ค์น˜)์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์˜ต์…˜:

  • --skip-lock ๋Š” ์˜์กด์„ฑ์„ ๋ชจํ˜ธํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ๋„๊ตฌ์˜ ๋ชฉ์ ์„ ๋ฌด๋ ฅํ™”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋‚˜์—๊ฒŒ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • --ignore-pipfile ์šฐ๋ฆฌ๊ฐ€ ์ง€์†์ ์œผ๋กœ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค, ๊ทธ๊ฒƒ์€ ์ฐจ์ด๋ฅผ ์ดํ›„ ์‹œ๊ฐ„์˜ 99 %ํ•˜์ง€ ๊ฒƒ์ด๋‹ค pipenv install ํ•ญ์ƒ์—์„œ ์„ค์น˜ ์ž์ฒด Pipfile.lock ๊ฐ€์™€ ์œ ํšจ ๊ธฐ๊ฐ„์ด ์•„๋‹ˆ๋ผ๋ฉด Pipfile .
  • --system ๋Š” ์ƒˆ๋กœ์šด ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๋„๋ก ์ง€์†์ ์œผ๋กœ ์œ ์ง€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ƒ๋‹นํ•œ ๊ฒฝ์šฐ pipenv ๊ฐ€ ์‹ค์ œ๋กœ pip ๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ python.requirements ๋Œ€ํ•œ ๋Œ€์ฒด๊ฐ€ python.install ๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์‚ฌ์šฉ์ž๋Š” pipenv install ๋‹จ๊ณ„์™€ pip install . ๋‹จ๊ณ„๋ฅผ ๋ชจ๋‘ ์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ข‹์•„์š”, ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. --dev ๊ฐ€ ํ˜„์žฌ ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ์ฃผ์š” ๊ธฐ๋Šฅ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด ์ž‘์—…์„ ์‹œ์ž‘ํ•  ๋•Œ pipenv ๋ฅผ pip ๋Œ€์ฒดํ’ˆ์œผ๋กœ ์ทจ๊ธ‰ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. pip ๋ฐ pipenv ๋‹จ๊ณ„๊ฐ€ ๋ชจ๋‘ ์žˆ๋Š” ์›Œํฌํ”Œ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ‚ค์ง€์˜ ์˜ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ณผ์—ฐ ์–ด๋–ค ๋ชจ์Šต์ผ์ง€ ๊ถ๊ธˆํ•˜๊ธฐ๋งŒ ํ•ฉ๋‹ˆ๋‹ค.

pip ๋‹จ๊ณ„๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ๊ณผ ๋ฐ˜๋Œ€๋กœ pipenv ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์ž˜๋ชป๋œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. conda์— ๋Œ€ํ•ด ๋งŽ์ด ์•Œ์ง€ ๋ชปํ•˜๋”๋ผ๋„ ์•„๋งˆ๋„ ๊ทธ๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ conda๋ฅผ ์ทจ๊ธ‰ํ•˜๋Š” ๋ฐฉ์‹์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

์†”์งํžˆ ๋งํ•ด์„œ ํ•ด๋‹น ์›Œํฌํ”Œ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ‚ค์ง€์˜ ์˜ˆ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. pipenv ์„ค๋ช…์„œ์˜ ์ด ์„น์…˜์—์„œ ๋‚ด ์˜ˆ์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‚ด ์ž์‹ ์˜ ์‚ฌ์šฉ์— ์ตœ๋Œ€ํ•œ ํŽธํ–ฅ๋˜์ง€ ์•Š๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค(์ฆ‰, pipenv ๋Š” Pipfile.lock์—์„œ ํ”„๋กœ์ ํŠธ ์ž์ฒด๋ฅผ ์„ค์น˜ํ•˜๋ฏ€๋กœ pip ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ์ด ์›Œํฌํ”Œ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

ํ•ด๋‹น ์›Œํฌํ”Œ๋กœ์—์„œ๋Š” pipenv ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ‚ค์ง€ ์ž์ฒด๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์กฐ๊ธˆ ๋” ์กฐ์‚ฌํ•œ ํ›„์—๋Š” ์ด ์›Œํฌํ”Œ๋กœ๊ฐ€ ์‹ค์ œ๋กœ pip ์„ค์น˜๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ํ”„๋กœ์ ํŠธ์— ๋” ์ง‘์ค‘๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. pipenv ์™€ poetry ๋ฅผ ๋น„๊ตํ•  ๋•Œ Python Packaging User Guide ๋ฅผ ์ธ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค.

pipenv ๋Š” PyPI์˜ ๊ตฌ์„ฑ ์š”์†Œ์— ์˜์กดํ•˜๋Š” ์ž‘์—… ์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž์ฒด๊ฐ€ pip -์„ค์น˜ ๊ฐ€๋Šฅํ•œ Python ํŒจํ‚ค์ง€๋กœ ๋ฐฐํฌ๋ฅผ ์ง€์›ํ•œ๋‹ค๋Š” ๊ฐ€์ •์„ ๋ช…์‹œ์ ์œผ๋กœ ํ”ผํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ pipenv ๋ฅผ pip ๋Œ€ํ•œ ๋Œ€์ฒดํ’ˆ์œผ๋กœ ์ทจ๊ธ‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ๋งž์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @agjohnson์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ฃผ๋กœ pipenv๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๋‚ด ํŒŒ์ด์ฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ (๊ทธ๋ฆฌ๊ณ  ๋‚ด librairies PBR์— ๋งค์šฐ ๊ฐ์‚ฌ ๋“ฑ์„). ์ง€๊ธˆ๊นŒ์ง€๋Š” ๋งค์šฐ ๋งŒ์กฑํ•˜๋ฉฐ ํ˜„์žฌ Pipfile์„ ์ง€์›ํ•˜์ง€ ์•Š๋”๋ผ๋„ readthedoc์ด ๋งŒ์กฑํ•  ์ˆ˜ ์žˆ๋„๋ก requirements.txt๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ž‘์€ ํŒจํ‚ค์ง€ ๋ฅผ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.

readthedocs compatible, pipenv ๋“ฑ ์ƒˆ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํ•˜๋Š”

๋”ฐ๋ผ์„œ ReadTheDocs๊ฐ€ Pipfile(๋ฐ pipenv)์„ ์›ํ™œํ•˜๊ฒŒ ์ง€์›ํ•œ๋‹ค๋ฉด ์ด ๋ฌธ์ œ๋ฅผ ์—†์•จ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋งค์šฐ ๊ธฐ์  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

TD; DR: pipenv๋Š” ์ฃผ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹Œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ pipenv๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•ฑ์— ๋Œ€ํ•œ readthedocs๋Š” ํ›Œ๋ฅญํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค!

๋ฌผ๋ก  "--dev"๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ž ๊ธˆ ํŒŒ์ผ์— ๋Œ€ํ•œ ์งˆ๋ฌธ์€ ๊นŒ๋‹ค ๋กญ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์˜๊ฒฌ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ์ž ๊ธˆ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋‘์— ๋Œ€ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฒฝ์šฐ ํŒจํ‚ค์ง€์˜ ์ข…์†์„ฑ์„ ์ž ๊ทธ๋ฉด ์•ˆ ๋˜๋ฏ€๋กœ pip๊ฐ€ pip install mydeps ์— ๋Œ€ํ•œ ์ข…์†์„ฑ ๋ฒ„์ „์„ ํ•ด๊ฒฐํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

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

ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ Pipfile์„ ๊ฐ์ง€, ๊ทธ๋ƒฅ ๋ชจ๋“  ์•ž์— ์ถ”๊ฐ€ pip install ์™€ pipenv run : ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ™์€ pipenv run pip install sphinx sphinx-rtd-theme . pipenv install ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๋ฆฌ์กธ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ ๋ฌด์˜๋ฏธํ•˜๊ณ  ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ ˆ์ด๋”์— ๋†’์€ ์œ„์น˜์— ์žˆ์–ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ? ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ํ•ดํ‚นํ•˜๊ณ  ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— readthedocs๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ •๋ง๋กœ ๋ง‰๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@petersmithca ์ด๊ฒƒ์€ ์šฐ๋ฆฌ์˜ ๋ ˆ์ด๋”์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ๊ตฌ์„ฑ ํŒŒ์ผ์˜ v2๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ  pipfile์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ์›Œํฌํ”Œ๋กœ๋ฅผ ๋” ์ž˜ ์ดํ•ดํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ์›Œํฌํ”Œ๋กœ์— ๋Œ€ํ•œ ๋ชจ๋“  ๋„์›€๋ง/์ฝ”๋ฉ˜ํŠธ๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ์˜คํ•ด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ณธ์งˆ์ ์œผ๋กœ ๋‚ด ์›Œํฌํ”Œ๋กœ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ virtualenv ๋ฐ pip install -r requirements.txt ์„ pipenv install ๋Œ€์ฒดํ•˜๊ณ  ํ™˜๊ฒฝ์˜ ๋ชจ๋“  ํ™œ์„ฑํ™”๋ฅผ pipenv shell ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค

@petersmithca pipenv install pipenv sync --dev ๋Œ€์‹  sync ๋Š” ์„ค์น˜๋œ ํŒจํ‚ค์ง€๊ฐ€ Pipfile.lock ์ •์˜๋œ ํŒจํ‚ค์ง€์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์ง€๋งŒ ํ•ด๋‹น ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ pipenv install --dev ์ด ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ „์—๋Š” sync๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์ง€๋งŒ --dev์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.
๋‚ด ๊ฐœ๋ฐœ์ž ์•„๋ž˜์— ์žˆ๋Š” ๋ฌธ์„œ, ๋ฐฉ๊ธˆ ์žŠ์–ด๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค.

2018๋…„ 8์›” 29์ผ ์ˆ˜์š”์ผ ์˜คํ›„ 1:59 Miguel Sรกnchez de Leรณn Peque <
[email protected]>์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@petersmithca https://github.com/petersmithca pipenv ์„ค์น˜ ๋Œ€์‹ 
๋Œ€์‹  pipenv sync --dev๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ข…์†์„ฑ์„ ๋„ฃ์Šต๋‹ˆ๋‹ค.
์˜ "dev" ์„น์…˜์— ์žˆ๋Š” ๋ฌธ์„œ ์ƒ์„ฑ ๋ฐ ํ…Œ์ŠคํŠธ์™€ ๊ด€๋ จ๋œ
ํ•ํŒŒ์ผ. ๋˜ํ•œ ๋™๊ธฐํ™”๋Š” ์„ค์น˜๋œ ํŒจํ‚ค์ง€๊ฐ€ ํŒจํ‚ค์ง€์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
Pipfile.lock์— ์ •์˜๋˜์–ด ์žˆ์ง€๋งŒ ํ•ด๋‹น ํŒŒ์ผ์ด ์—†์œผ๋ฉด pipenv
install --dev๋Š” ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/rtfd/readthedocs.org/issues/3181#issuecomment-417027482 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AE1F_bRgPmEc1uydCZKtJtT95vwIua_Eks5uVshbgaJpZM4QDCg9
.

์ž ๊ธˆ ํŒŒ์ผ์„ ๊ฐ•์ œ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด pipenv install --ignore-pipfile --dev ๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

venv/virtualenv ๋Œ€์‹  pipenv๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์‹ค์ œ๋กœ๋Š” ์—ฌ์ „ํžˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

pipenv ๋ฌธ์„œ์—์„œ

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

๋”ฐ๋ผ์„œ pipenv๋ฅผ ๋‹ค๋ฅธ ์„ค์น˜ ๋ฐฉ๋ฒ•(์˜ˆ: pip ๋˜๋Š” setup.py)์œผ๋กœ ์ทจ๊ธ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ pipenv๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ๋Š”๋ฐ ๋‹ค์Œ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

  • --ignore-pipfile ๋Š” ์ž ๊ธˆ ํŒŒ์ผ์ด ์—†์œผ๋ฉด ์ƒ์„ฑํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
  • pipenv install ์‹คํ–‰ํ•˜๋ฉด ์ž ๊ธˆ ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • --skip-lock ์‹คํ–‰ํ•˜๋ฉด ์ž ๊ธˆ์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  pipfile์—์„œ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.

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

๊ทธ๋ž˜์„œ un-pined dep(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ฐ™์€)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์„ ๋ชจ๋‘ ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? --ignore-pipfile ๋ฐ --skip-lock ? ( --ignore-pipfile ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ผœ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค)

Pipenv๋Š” ์‚ฌ์šฉ์ž ์ง€์ • Pipfile ์ง€์ •์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(roo ๋””๋ ‰ํ† ๋ฆฌ ์ด์™ธ์˜ ์„ค์น˜๋ฅผ ์ง€์›ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค). ๊ทธ๋ž˜์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ๋„ฃ์„ ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ๋ช…๋ น์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 PIPENV_PIPFILE=./custom/path/Pipfile pipenv install --system --dev --ignore-pipfile --skip-lock 

--skip-lock ๋ฐ --ignore-pipfile ๋Š” yaml ํŒŒ์ผ์˜ ์˜ต์…˜์ด๊ณ  --ignore-pipfile ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ผœ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ --dev ๋Š” ์˜ต์…˜์ด๋ฉฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊บผ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ๋™์ผํ•œ ๊ฐ€์ƒ ํ™˜๊ฒฝ์— ์ข…์†์„ฑ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ https://github.com/gsemet/cfgtree์— ๋Œ€ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

version: 2
sphinx:
  configuration: docs/conf.py
python:
  install:
    - pipfile: .
      skip_lock: true
      dev: true
    - path: .
      method: pip

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„, ์ €๋Š” rtd์—์„œ pipfile ์ง€์›์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. pipfile์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ(๊ทธ๋ฆฌ๊ณ  ๋นŒ๋“œํ•  ๋ฌธ์„œ๊ฐ€ ์žˆ์Œ)์— ๋Œ€ํ•ด ์˜๊ฒฌ์„ ๋ง์”€ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์€ ํ…Œ์ŠคํŠธ์— ๋งŽ์€ ๋„์›€์ด ๋  ๊ฒƒ์ด๋ฉฐ ๋ฒ„๊ทธ๊ฐ€ ์ ์€ ๊ตฌํ˜„ p๋ฅผ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

https://github.com/dls-controls/pytac ์€ Pipenv๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  pipfile์ด ์žˆ์ง€๋งŒ ์ •ํ™•ํ•œ ๋ชฉ์ ์„ ์œ„ํ•œ rtd-requirements.txt ํŒŒ์ผ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. https://pytac.readthedocs.io/en/latest/์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ด๊ฒƒ์ด pipenv-to-requirements/ ์˜ ์—ญํ• ์ž…๋‹ˆ๋‹ค. :)

@willrogers ํ˜„์žฌ ๊ตฌํ˜„์œผ๋กœ ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ด ๋ฌธ์ œ๋Š” ์ตœ๊ทผ ํ™œ๋™์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ์˜ค๋ž˜๋œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ํ™œ๋™์ด ์—†์œผ๋ฉด ํ์‡„๋ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๊ธฐ์—ฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

@stsewd ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? :๋ถ‰ํžˆ๋‹ค:

๋ด‡์—๊ฒŒ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์˜ค๋ž˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” https://github.com/rtfd/readthedocs.org/pull/4740์— ์˜ํ•ด์„œ๋งŒ ์ฐจ๋‹จ๋˜๋ฉฐ, ๋‹ค๋ฅธ ๊ฒ€ํ† ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ทธ ์œ„์— https://github.com/rtfd/readthedocs.org/pull/4783 ์„ ๋ณ‘ํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ๊ฑฐ์˜ ๊ทผ์ ‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„, ์ด๊ฒƒ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? #4740์ด ๋ณ‘ํ•ฉ๋œ ๊ฒƒ ๊ฐ™์€๋ฐ #4783๋„ ๋ณ‘ํ•ฉ๋  ์ˆ˜ ์žˆ๋‚˜์š”? ์ด ๊ธฐ๋Šฅ์ด ์ •๋ง ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์•„์ง ๊ณ„ํš์— ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด ์ž‘์—…์€ pipenv๋ฅผ ๋…์ ์ ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์˜ ์ง€์› ์—†์ด, ๋‚˜๋Š” ์ผ์„ ์ž‘๋™์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์•ฝ๊ฐ„์˜ ํ•ดํ‚น์„ ๊ตฌ์ถ•ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

@stsewd ์ด์ „์— pipenv์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ์ฃผ์„์„ ๋‹ฌ์•„์•ผ ํ•œ๋‹ค๊ณ  ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/pyvec/docs.pyvec.org ๋ฐ https://github.com/honzajavorek/cojeapi๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌ

๋‘˜ ๋‹ค ํ˜„์žฌ ๋ฌธ์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ข…์†์„ฑ์„ ๋ง์น  ๋•Œ๋งˆ๋‹ค pipenv lock --requirements > requirements.txt ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์ด ๋™๊ธฐํ™”๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” CI๊ฐ€ ์žˆ์ง€๋งŒ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์€ ์„ฑ๊ฐ€์‹  ์ผ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” ๋” ๋‚˜์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋” ์›ํ™œํ•œ ์ž‘์—… ํ๋ฆ„์œผ๋กœ ์ด์–ด์งˆ ์ œ์•ˆ์„ ํ•ด์ค€๋‹ค๋ฉด ๊ธฐ์  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

(์‚ฌ๋žŒ์ด ๋ฆฐํ„ฐ์— ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด, ๋ณผ ์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ . ์ž‘ํ’ˆ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ๋กœ dependabot .)

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„, ์—ฌ๊ธฐ์—์„œ ์นจ๋ฌต์— ๋Œ€ํ•ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” pipenv๋ฅผ ์ง€์›ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

  • ํ•œ ๊ฐ€์ง€๋Š” pipenv๊ฐ€ PEP 517 https://github.com/pypa/pipenv/issues/2787#issuecomment -416685889๋ฅผ ์ฑ„ํƒํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. pip๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ ๋” ๋งŽ์€ ์˜ต์…˜์„ ๊ตฌํ˜„ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค).
  • pipenv์˜ ๋งˆ์ง€๋ง‰ ๋ฆด๋ฆฌ์Šค๋Š” 1๋…„ ์ „ https://pypi.org/project/pipenv/#history ์ด๋ฉฐ ํ”„๋กœ์ ํŠธ๊ฐ€ ์–ด๋–ค ๋ฐฉํ–ฅ์œผ๋กœ ๋‚˜์•„๊ฐˆ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • Pipenv๋Š” deps๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ ๋Š๋ฆฌ๊ณ  ์ด๋ฏธ conda์— ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ conda๋Š” ์ตœ๊ทผ์— ๊ฐœ์„ ๋˜์—ˆ์œผ๋ฏ€๋กœ pipenv๋Š” ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ํ•ด๋‹น ์˜์—ญ์—์„œ๋„ ๊ฐœ์„ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ์‹คํ—˜์ ์ธ ๋ฐฉ์‹์œผ๋กœ pipenv๋ฅผ ์ง€์›ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ(์šฐ๋ฆฌ๋Š” ์ด๋ฏธ pipenv ์ง€์›๊ณผ ํ•จ๊ป˜ PR ์ข…๋ฅ˜๊ฐ€ ์ค€๋น„๋˜์–ด ์žˆ์Œ) ๋ณด์ฆ ์—†์ด ์ œ๊ฑฐ/๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฒฐ์ •์˜ ์ผ๋ถ€๋Š” ์šฐ๋ฆฌ๊ฐ€ pipenv๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ ์˜์›ํžˆ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์˜ ์˜๊ฒฌ์„ ์•Œ๋ ค์ฃผ์„ธ์š”.

๋‚˜๋Š” ๊ฐœ์ธ์ ์œผ๋กœ Pipenv ์‚ฌ์šฉ์„ ์ค‘๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค(์—ฌ์ „ํžˆ Conda์™€ Poetry ์‚ฌ์šฉ). PEP 517๋กœ ๊ฐ€๋Š” ๊ฒƒ์ด ์ตœ์„ ์˜ ์„ ํƒ์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Pipenv๋Š” ์—ฌ์ „ํžˆ ์ตœ๊ณ ์˜ ์ง€์› ์˜ต์…˜์ž…๋‹ˆ๋‹ค. pycharm ๋ฐ spacemacs์™€ ๊ฐ™์€ ํŽธ์ง‘๊ธฐ๋Š” pipenv๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Dependabot์€ pipenv๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. pipenv๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์œ ์ผํ•œ ๋„๊ตฌ๋Š” readthedocs์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋ฏธ๋ž˜์— ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚  ์ง€ ์ „ํ˜€ ๋ชจ๋ฅธ๋‹ค. pipenv๊ฐ€ 1๋…„ ๋„˜๊ฒŒ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ์‚ฌ์‹ค์€ pipenv์— ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‹œ[1]์™€ ํ”Œ๋ฆฌํŠธ[2]๊ฐ€ ํ™œ๋ฐœํ•˜๊ฒŒ ์œ ์ง€๋˜๋Š” ๊ฒƒ์„ ๋ณธ๋‹ค. ํ• ์ž์ฒด๊ฐ€ ๊ฐœ์„  ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ง€๊ธˆ์€ ์ข‹๋“  ์‹ซ๋“  pipenv๊ฐ€ ์ตœ์„ ์˜ ์„ ํƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ , ๋‚˜์ค‘์— ๊ต์ฒดํ•˜๋”๋ผ๋„ ์˜ค๋ž˜๋„๋ก ๋ ˆ๊ฑฐ์‹œ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ Python ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ requirements.txt ๊ธฐ๋ฐ˜ pip ์„ค์น˜์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์„ ํ˜ธํ•˜๋Š” ์†”๋ฃจ์…˜์„ ๋นจ๋ฆฌ ์„ ํƒํ• ์ˆ˜๋ก ๋” ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์„ ์„ ํƒํ•˜๋ฏ€๋กœ readthedocs์™€ ๊ฐ™์€ ๋„๊ตฌ๋Š” ๋ชจ๋‘ ๋‹ค์–‘ํ•œ ์†”๋ฃจ์…˜์„ ์ง€์›ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋…ธํŠธ:

[1] ์ตœ๊ทผ์— ์‹œ๋ฅผ ์‹œ๋„ํ–ˆ๋Š”๋ฐ ๊ธฐ์กด requirements.txt ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์—์„œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹œ๊ฐ€ ๋ฏธ๋ž˜์˜ ๋ฐฉ์‹์ด๋ผ๋ฉด ์ด ๋ฌธ์ œ๋Š” ์‰ฝ๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ+์ข…์†์„ฑ์€ ํŠน๋ณ„ํžˆ ๊ฐ€๋ณ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” CI ์‹คํ–‰์„ ์œ„ํ•ด ์ฆ‰์„์—์„œ ์„ค์น˜ํ•  ๋•Œ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

[2] flt์— ์ต์ˆ™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ ๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์‹œ๋ฅผ ์ง€์›ํ•  ๊ณ„ํš์€ ์—†๋‚˜์š”? ํ˜„์žฌ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค
๋‚ด๊ฐ€ ๋กœ์ปฌ์—์„œ repo๋ฅผ ํ•ดํ‚นํ•˜์ง€ ์•Š๋Š” ํ•œ Pipenv ๋˜๋Š” Poetry๊ฐ€ ์žˆ๋Š” ์ œํ’ˆ
๋ฌผ๋ก  ์—…๋ฐ์ดํŠธํ•  ๋•Œ๋งˆ๋‹ค ๋ฎ์–ด์”๋‹ˆ๋‹ค.

2019๋…„ 11์›” 26์ผ ํ™”์š”์ผ ์˜คํ›„ 2:04 Santos Gallegos [email protected]
์ผ๋‹ค:

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„, ์—ฌ๊ธฐ์—์„œ ์นจ๋ฌต์— ๋Œ€ํ•ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
pipenv ์ง€์› ์—ฌ๋ถ€.

  • ํ•œ ๊ฐ€์ง€๋Š” pipenv๊ฐ€ PEP 517 pypa/pipenv#2787์„ ์ฑ„ํƒํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ฑ„ํƒํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
    (๋…ผํ‰)
    https://github.com/pypa/pipenv/issues/2787#issuecomment-416685889
    ์‹œ๋‚˜ ํ”Œ๋ฆฌํŠธ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋„๊ตฌ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ(์ด๋ฅผ ํ†ตํ•ด pip๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ๊ตฌ์„ฑ ํŒŒ์ผ์— ๋” ๋งŽ์€ ์˜ต์…˜์„ ๊ตฌํ˜„ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค).
  • pipenv์˜ ๋งˆ์ง€๋ง‰ ๋ฆด๋ฆฌ์Šค๋Š” 1๋…„ ์ „์ด์—ˆ์Šต๋‹ˆ๋‹ค.
    https://pypi.org/project/pipenv/#history , ์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์— ๋Œ€ํ•ด ํ™•์‹ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค
    ํ”„๋กœ์ ํŠธ๊ฐ€ ๋‚˜์•„๊ฐˆ ๋ฐฉํ–ฅ.
  • Deps๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ Pipenv๊ฐ€ ๋Š๋ฆฝ๋‹ˆ๋‹ค. ์ด๋ฏธ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์ฝ˜๋‹ค์™€ ํ•จ๊ป˜. ๊ทธ๋Ÿฌ๋‚˜ conda๋Š” ์ตœ๊ทผ์— ๊ฐœ์„ ๋˜์—ˆ์œผ๋ฏ€๋กœ pipenv๋Š”
    ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ํ•ด๋‹น ์˜์—ญ์—์„œ๋„ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ์‹คํ—˜์ ์ธ ๋ฐฉ์‹์œผ๋กœ pipenv๋ฅผ ์ง€์›ํ•˜๋ ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์šฐ๋ฆฌ๋Š” ์ด๋ฏธ
    pipenv ์ง€์›์œผ๋กœ ์ค€๋น„๋œ PR ์ข…๋ฅ˜), ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์ œ๊ฑฐ/๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์–ด๋–ค ๋ณด์ฆ.

์ด๋Ÿฌํ•œ ๊ฒฐ์ •์˜ ์ผ๋ถ€๋Š” ์šฐ๋ฆฌ๊ฐ€ pipenv๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด
์šฐ๋ฆฌ๋Š” ์˜์›ํžˆ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์˜ ์˜๊ฒฌ์„ ์•Œ๋ ค์ฃผ์„ธ์š”.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/readthedocs/readthedocs.org/issues/3181?email_source=notifications&email_token=ABGUL7JZGO2MZLY7WMZJ6X3QVVQJJA5CNFSM4EAMFA62YY3PNVWWK3TUL52HS4DFVREXG43
๋˜๋Š” ๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/ABGUL7JU6HHROEZP6IWAE3TQVVQJJANCNFSM4EAMFA6Q
.

๊ทธ๋ ‡๋‹ค๋ฉด ์‹œ๋ฅผ ์ง€์›ํ•  ๊ณ„ํš์€ ์—†๋‚˜์š”?

@petersmithca ์ด์ œ ์‹œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค https://poetry.eustace.io/docs/pyproject/#poetry -and-pep-517

๋‚ด ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์‹œ์™€ ํ•จ๊ป˜ ๋ฌธ์„œ ์ž‘์—…์„ ์ฝ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

2019๋…„ 11์›” 27์ผ ์ˆ˜์š”์ผ ์˜ค์ „ 11:18 Santos Gallegos [email protected]
์ผ๋‹ค:

๊ทธ๋ ‡๋‹ค๋ฉด ์‹œ๋ฅผ ์ง€์›ํ•  ๊ณ„ํš์€ ์—†๋‚˜์š”?

์ด์ œ ์‹œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
https://poetry.eustace.io/docs/pyproject/#poetry -and-pep-517

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/readthedocs/readthedocs.org/issues/3181?email_source=notifications&email_token=ABGUL7P7B5C5HSU4DDSMDNTQV2FTBA5CNFSM4EAMFA62YY3PNVWWK3TUL52HS4DFVEXG43VMVB
๋˜๋Š” ๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/ABGUL7KI4LUTHHYUITCB7YYLQV2FTBANCNFSM4EAMFA6Q
.

๋‚ด ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์‹œ์™€ ํ•จ๊ป˜ ๋ฌธ์„œ ์ž‘์—…์„ ์ฝ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ, ์šฐ๋ฆฌ๋Š” ์‹œ๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜์ง€ ์•Š์ง€๋งŒ pip๋กœ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค(์ฆ‰, PEP 517).

์˜ค ๊ทธ๋ž˜. ๋ฉ‹์ง„ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

2019๋…„ 11์›” 27์ผ ์ˆ˜์š”์ผ ์˜ค์ „ 11:22 Santos Gallegos [email protected]
์ผ๋‹ค:

๋‚ด ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์‹œ์™€ ํ•จ๊ป˜ ๋ฌธ์„œ ์ž‘์—…์„ ์ฝ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ, ์šฐ๋ฆฌ๋Š” ์‹œ๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜์ง€ ์•Š์ง€๋งŒ pip๋กœ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค(์ฆ‰, PEP
517)

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/readthedocs/readthedocs.org/issues/3181?email_source=notifications&email_token=ABGUL7M2WA2SR2JL54AIIG3QV2GEPA5CNFSM4EAMFA62YY3PNVWWK3TUL52HS4DFVEXG43VMVB
๋˜๋Š” ๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/ABGUL7OXN4AK63UAIL7TO3LQV2GEPANCNFSM4EAMFA6Q
.

๋‚ด ์ดํ•ด๋Š” pip๊ฐ€ ๋ฏธ๋ž˜์˜ ์–ด๋Š ์‹œ์ ์—์„œ Pipfile ๋ฐ Pipfile.lock ํ˜•์‹์„ ์ง€์›ํ•˜๊ธฐ ์‹œ์ž‘ํ•  ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ด๋Š ์ชฝ์ด๋“  Pipenv๋ฅผ ์‚ฌ์šฉํ•œ ์ข…์†์„ฑ ๊ด€๋ฆฌ๊ฐ€ pip๋ณด๋‹ค ์ง๊ด€์ ์ด๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋‚ด์žฅ๋œ venv๊ฐ€ ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค.

@zbeekman ๊ทธ ์ดํ•ด์— ๋Œ€ํ•œ ์ถœ์ฒ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ง€๊ธˆ๊นŒ์ง€ ์ž…๋ ฅํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์žˆ์œผ๋ฉด ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์„ ์„ ํƒํ•˜๋ฏ€๋กœ readthedocs์™€ ๊ฐ™์€ ๋„๊ตฌ๋Š” ๋ชจ๋‘ ๋‹ค์–‘ํ•œ ์†”๋ฃจ์…˜์„ ์ง€์›ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋Š ์ •๋„ ๊ฐ™์€ ๋Š๋‚Œ์ด ๋“ญ๋‹ˆ๋‹ค. RTD๋Š” ํ”„๋กœ์„ธ์Šค ๋ฐ ๋„๊ตฌ์— ๋Œ€ํ•ด ์ง€๋‚˜์น˜๊ฒŒ ๋…๋‹จ์ ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ Python ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์ „๋ฐ˜์ ์œผ๋กœ ์ง€์›ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์›Œํฌํ”Œ๋กœ์— ๋” ๋งŽ์€ ์œ ์—ฐ์„ฑ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

์ผ๋ฐ˜์ ์œผ๋กœ ์ด ์‹œ์ ์—์„œ ๋‚˜๋Š” ์•„๋งˆ๋„ pipenv ์ง€์›์— ๋Œ€ํ•œ ํ•˜๋“œ ํŒจ์Šค๋กœ ํˆฌํ‘œํ•  ๊ฒƒ์ด์ง€๋งŒ ์ด๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋งŽ์€ ์š”์ฒญ์„ ๋ฐ›๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

pipenv ์‚ฌ์šฉ์ž๋ผ๋ฉด ์ฝ”์–ด ํŒ€์—์„œ ๋” ๋งŽ์€ ๋‹ต๋ณ€์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์งˆ๋ฌธ์€ "์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?"์ž…๋‹ˆ๋‹ค. pipenv์— ๋Œ€ํ•œ ์šฐ๋ฆฌ์˜ ๊ฒฐ์ •์€ ์ผ์ƒ์ ์ธ ๊ฐœ๋ฐœ์—์„œ ๋‘ ๋„๊ตฌ์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋” ์™œ๊ณก๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹œ๋Š” pipenv์™€ ๋™์˜์–ด์ฒ˜๋Ÿผ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค. RTD๋งŒ์ด ์‹ค์ œ๋กœ ์‹œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ๋‹น์‹œ ๋‚ด๊ฐ€ (์‹œ๊ฐ€ ์•„๋‹ˆ๋ผ) pipenv๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š” ํ†ตํ•ฉ์—์„œ Pipfile์— ๋Œ€ํ•œ ๊ด‘๋ฒ”์œ„ํ•œ ์ง€์›์ด์—ˆ์Šต๋‹ˆ๋‹ค. , pyproject.toml ๋ฐ ์‹œ์— ๋Œ€ํ•œ ์ง€์›์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋“œ๋ญ…๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ํ™•์ธํ–ˆ์„ ๋•Œ ์ด์ œDependabot์ด ์ง€์›ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์ง€๋งŒ ๋‚˜๋จธ์ง€๋Š” ์˜์‹ฌ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. RTD๋Š” ์‹ค์ œ๋กœ ๋‚ด๊ฐ€ Pipfile์— ๋Œ€ํ•œ ํ•ต์„ ์•Œ์•„๋‚ด์•ผ ํ•˜๋Š” ์œ ์ผํ•œ ๊ณณ์ด์—ˆ๊ณ  ์‹œ๊ฐ€ ๋” ๋นจ๋ฆฌ ์ง€์›๋˜๋Š” ๊ณณ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ๋„๊ตฌ๊ฐ€ ๊ฒฐ๊ตญ ์‚ฌ์šฉ์ž๋ฅผ ์ด๊ฒผ๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ œ ์ƒ๊ฐ์—๋Š” ์‚ฌ๋žŒ๋“ค์ด pip + virtualenv์™€ ๊ฐ™์€ ๊ฒƒ์„ ๊ฐ„์ ˆํžˆ ์›ํ–ˆ๊ณ  pipenv๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹œ๋Š” ์ž˜ ์•Œ๋ ค์ง€์ง€ ์•Š์•˜๊ณ , ๋‚ด๊ฐ€ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์•Œ์•˜์„ ๋•Œ ๋งˆ์นจ๋‚ด ์ƒํƒœ๊ณ„๋ฅผ ์ง€๋ฐฐํ•˜๋Š” ํ•˜๋‚˜์˜ ๋„๊ตฌ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์‚ฐ๋งŒํ•˜๋‹ค๋Š” ๋Š๋‚Œ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ์‚ฌ๋žŒ๋“ค์€ pipenv์˜ ๊ฒฐํ•จ์„ ๊นจ๋‹ซ๊ณ  ํ•์œผ๋กœ ๋Œ์•„๊ฐ€๊ฑฐ๋‚˜ ๋Œ€์•ˆ์„ ์ฐพ๊ณ  ์‹œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์ด ์•„์ง๋„ ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„์š”. ๋„๊ตฌ๋Š” ์‹œ๋ฅผ ์•Œ์•„์ฐจ๋ฆฌ๋Š” ๊ฒƒ์„ ๋”ฐ๋ผ์žก์ง€๋งŒ pipenv๋Š” ๋” ์ผ์ฐ ๋Œ€๋Ÿ‰ ์ฑ„ํƒ๋˜์—ˆ์œผ๋ฉฐ ์ด๋ฏธ "๋ชจ๋“  ๊ณณ์—์„œ" ์ง€์›๋ฉ๋‹ˆ๋‹ค.

๋งŽ์€ ์‚ฌ๋žŒ๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์˜ค๋Š˜๋‚  ๋‚˜๋Š” pipenv์˜ ํ•œ๊ณ„๋ฅผ ๋ณด๊ณ  ์‹œ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ƒ๊ฐ์„ ํ•˜์ง€๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ๊ฐ€ ๋”ฐ๋ผ์žก์„ ๋•Œ๊นŒ์ง€ ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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