[์„ค์น˜] pipenv๋กœ pyenv ๋ฝ• ๋ฝ‘๊ธฐ

Posted by Euisuk's Dev Log on April 27, 2024

[์„ค์น˜] pipenv๋กœ pyenv ๋ฝ• ๋ฝ‘๊ธฐ

์›๋ณธ ๊ฒŒ์‹œ๊ธ€: https://velog.io/@euisuk-chung/pipenv-๋„ˆ๋„-๊ฐ™์ด-์˜ค๊ณ -pyenv-pipenv

์ง€๋‚œ ๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” pyenv์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด๊ณ  ์ด๋ฅผ ๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ(+Windowํ™˜๊ฒฝ)์— ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ดค๋Š”๋ฐ์š”(๋งํฌ) ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” pyenv์˜ ํšจ๊ณผ๋ฅผ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” pipenv์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด๊ณ , ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ• ์ง€ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿค—

1. pipenv๋ž€?

  • ์ •์˜: pipenv๋Š” ํŒŒ์ด์ฌ์˜ ์˜์กด์„ฑ ๊ด€๋ฆฌ์™€ ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ํ†ตํ•ฉ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๋Š” Pipfile๊ณผ Pipfile.lock ํŒŒ์ผ์„ ์ด์šฉํ•˜์—ฌ ์˜์กด์„ฑ์„ ๋ช…์‹œํ•˜๊ณ , ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ๋…๋ฆฝ๋œ ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•˜์—ฌ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ์ผ๊ด€์„ฑ๊ณผ ์žฌํ˜„์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

2. pipenv ์„ค์น˜ ๋ฐฉ๋ฒ•

  • pipenv ์„ค์น˜:
    1
    
    pip install pipenv
    

    ์ด ๋ช…๋ น์€ ์‹œ์Šคํ…œ์— pipenv๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ์‚ฌ์šฉ์ž์— ๊ตญํ•œํ•˜์ง€ ์•Š๊ณ  ์‹œ์Šคํ…œ ์ „์ฒด์— ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.

3. pipenv ๊ฐ€์ƒ ํ™˜๊ฒฝ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ

  • (์ฐธ๊ณ ) ๋‚ด PyENV ํ™˜๊ฒฝ์— ์„ค์น˜๋œ ํŒŒ์ด์ฌ ๋ฒ„์ „ ๋ฆฌ์ŠคํŠธ ํ™•์ธํ•˜๊ธฐ

    1
    
    pyenv versions # check installed envs
    
  • ๊ฐ€์ƒ ํ™˜๊ฒฝ ์ƒ์„ฑ:

    1
    2
    3
    
    mkdir MyProject
    cd MyProject
    pipenv --python 3.9.1
    

    ์ด ๋ช…๋ น์€ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์— Pipfile์„ ์ƒ์„ฑํ•˜๊ณ  ์ง€์ •๋œ ํŒŒ์ด์ฌ ๋ฒ„์ „์œผ๋กœ ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐ€์ƒ ํ™˜๊ฒฝ ํ™œ์„ฑํ™” ๋ฐ ๋น„ํ™œ์„ฑํ™”:

    1
    2
    
    pipenv shell   # ํ™œ์„ฑํ™”
    exit           # ๋น„ํ™œ์„ฑํ™”
    
  • pyenv์™€์˜ ์—ฐ๋™:

    • ์‹œ์Šคํ…œ์— ์›ํ•˜๋Š” ํŒŒ์ด์ฌ ๋ฒ„์ „์ด ์—†๋Š” ๊ฒฝ์šฐ, pipenv๋Š” pyenv๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ํ•ด๋‹น ๋ฒ„์ „์„ ์„ค์น˜ํ•˜๋„๋ก ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. Pipfile?

Pipfile์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ์œ„์น˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ ํ”„๋กœ์ ํŠธ์™€ ๊ด€๋ จ๋œ ํŒŒ์ด์ฌ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ฃผ์š” ํŒŒ์ผ๋กœ, ํ”„๋กœ์ ํŠธ ํด๋”์— ์ง์ ‘ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  • Pipfile์˜ ์œ„์น˜: Pipfile์€ ํ”„๋กœ์ ํŠธ ํด๋” ์•ˆ์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ”„๋กœ์ ํŠธ ํด๋”๊ฐ€ MyProject๋ผ๋ฉด, MyProject/Pipfile์— ์œ„์น˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • Pipfile์˜ ํ™•์žฅ์ž: Pipfile์€ ํ™•์žฅ์ž ์—†์ด ๊ทธ๋ƒฅ Pipfile๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด์™€๋Š” ๋ณ„๊ฐœ๋กœ, ์˜์กด์„ฑ์„ ๊ณ ์ •ํ•˜๋Š” Pipfile.lock ํŒŒ์ผ๋„ ๊ฐ™์€ ํด๋”์— ์ƒ์„ฑ๋˜๋ฉฐ, ์ด ํŒŒ์ผ ์—ญ์‹œ ํ™•์žฅ์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • Pipfile๊ณผ Pipfile.lock์˜ ์‚ฌ์šฉ:

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

    1
    2
    
    pipenv install numpy  # numpy ์„ค์น˜
    pipenv lock           # Pipfile.lock ์ƒ์„ฑ ๋ฐ ์—…๋ฐ์ดํŠธ
    

    ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐฐํฌํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์ž‘์—…์„ ์žฌ๊ฐœํ•  ๋•Œ Pipfile.lock์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •ํ™•ํžˆ ๊ฐ™์€ ์˜์กด์„ฑ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

5. pipenv lock?

โœ”๏ธ pipenv lock ๋ช…๋ น์˜ ์—ญํ• 

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

๐Ÿ’ก Q. pipenv install numpy ๋งŒ ์ˆ˜ํ–‰ํ•ด๋„, pipfile์€ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ ํ…๋ฐ, ๊ตณ์ด lock์„ ํ•ด์ฃผ๋Š” ์ด์œ ๊ฐ€ ๋ญ˜๊นŒ์š”?

๐Ÿ“– A. pipenv install ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™์œผ๋กœ Pipfile์ด ์—…๋ฐ์ดํŠธ๋˜๋ฉฐ, ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ pipenv lock ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ์ถ”๊ฐ€์ ์ธ ๋ชฉ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

โœ”๏ธ pipenv install๊ณผ pipenv lock์˜ ์ฐจ์ด

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

    1. ์ข…์†์„ฑ ํŒŒ์ผ(Pipfile)์˜ ์ˆ˜๋™ ๋ณ€๊ฒฝ: ๊ฐœ๋ฐœ์ž๊ฐ€ Pipfile์„ ์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘ํ•˜์—ฌ ํŒจํ‚ค์ง€ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ƒˆ ํŒจํ‚ค์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ, Pipfile.lock์„ ๊ฐฑ์‹ ํ•ด์•ผ ๊ทธ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ •ํ™•ํ•˜๊ฒŒ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” Pipfile์˜ ์ƒํƒœ๊ฐ€ Pipfile.lock๊ณผ ๋™๊ธฐํ™”๋˜๋„๋ก ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
    2. ํ•˜์œ„ ์ข…์†์„ฑ(ํŒจํ‚ค์ง€)์˜ ์—…๋ฐ์ดํŠธ: ํŒจํ‚ค์ง€์˜ ํ•˜์œ„ ์ข…์†์„ฑ์ด ์—…๋ฐ์ดํŠธ๋˜์—ˆ์„ ๊ฒฝ์šฐ, pipenv lock ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ Pipfile.lock์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ•˜์œ„ ํŒจํ‚ค์ง€์˜ ๋ฒ„์ „ ๋ณ€๋™์ด ์ƒ์œ„ ํŒจํ‚ค์ง€์˜ ๊ธฐ๋Šฅ์„ฑ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
    3. ๋ณด์•ˆ ํŒจ์น˜ ์—…๋ฐ์ดํŠธ: ๋ณด์•ˆ ์ทจ์•ฝ์ ์ด ๋ฐœ๊ฒฌ๋˜์–ด ํ•ด๋‹น ํŒจํ‚ค์ง€์˜ ์ƒˆ๋กœ์šด ๋ฒ„์ „์ด ์ถœ์‹œ๋˜์—ˆ์„ ๋•Œ, pipenv lock์„ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์‹  ๋ณด์•ˆ ํŒจ์น˜๊ฐ€ ์ ์šฉ๋œ ๋ฒ„์ „์œผ๋กœ ์ข…์†์„ฑ์„ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ”„๋กœ์ ํŠธ์˜ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
    4. ํ˜ธํ™˜์„ฑ ๊ฒ€์ฆ(์ƒˆ ํ™˜๊ฒฝ ํ…Œ์ŠคํŠธ): ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒˆ๋กœ์šด ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜๊ธฐ ์ „์— pipenv lock์„ ์‹คํ–‰ํ•˜์—ฌ ์ตœ์‹  ์ข…์†์„ฑ ์ƒํƒœ๋ฅผ ํ™•์ •ํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ์ƒˆ ํ™˜๊ฒฝ์—์„œ์˜ ํ˜ธํ™˜์„ฑ์„ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ ๋ฐฐํฌ ์ „ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
    5. CI/CD ํŒŒ์ดํ”„๋ผ์ธ(์ง€์†์  ํ†ตํ•ฉ/๋ฐฐํฌ): CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ Pipfile.lock์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฐฑ์‹ ํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ์ข…์†์„ฑ์ด ํ•ญ์ƒ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€๋˜๊ณ , ๋ฐฐํฌ ์‹œ์ ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

6. ํ”„๋กœ์ ํŠธ๋ณ„ ๊ฐ€์ƒ ํ™˜๊ฒฝ ์„ค์ •

  • ๊ฐ€์ƒ ํ™˜๊ฒฝ์€ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ์ž๋™์œผ๋กœ ์ด๋ฆ„์ด ์ƒ์„ฑ๋˜๋ฉฐ, ๊ด€๋ฆฌ๋Š” ~/.local/share/virtualenvs ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
  • TensorFlow์™€ PyTorch ํ”„๋กœ์ ํŠธ ์˜ˆ์‹œ:

    1
    2
    3
    4
    5
    6
    
    # Tensorflow_ObjectDetection ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
    mkdir Tensorflow_ObjectDetection
    cd Tensorflow_ObjectDetection
    pipenv --python 3.9.1
    pipenv install tensorflow
    pipenv shell # ํ”„๋กœ์ ํŠธ ๊ฐ€์ƒํ™˜๊ฒฝ ์‹คํ–‰
    
    1
    2
    3
    4
    5
    6
    
    # PyTorch_AnomalyDetection ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
    mkdir PyTorch_AnomalyDetection
    cd PyTorch_AnomalyDetection
    pipenv --python 3.9.1
    pipenv install torch torchvision
    pipenv shell # ํ”„๋กœ์ ํŠธ ๊ฐ€์ƒํ™˜๊ฒฝ ์‹คํ–‰
    

๐Ÿ’ก Pipfiles(Pipfile, Pipfile.lock)์€ Git repository์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋‹ค๋ฅธ์‚ฌ๋žŒ์ด repository์„ clone ํ•˜๋ฉด Pipenv์„ ํ•ด๋‹น ์‹œ์Šคํ…œ์— ์„ค์น˜ํ•˜๊ณ  pipenv install๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด Pipenv๋Š” ์ž๋™์œผ๋กœ Pipfiles๋ฅผ ์ฐพ์•„์„œ ์ƒˆ๋กœ์šด ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ณ  ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋“ค์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

7. pipenv ๋ช…๋ น์–ด

๊ธฐ๋ณธ ๋ช…๋ น์–ด

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

๋ณด์•ˆ ๋ฐ ์ •๋ฆฌ ๋ช…๋ น์–ด

  • pipenv check: ์„ค์น˜๋œ ํŒจํ‚ค์ง€๋ฅผ PyUp Safety๋ฅผ ํ†ตํ•ด ๋ณด์•ˆ ์ทจ์•ฝ์ ์ด ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๊ณ , Pipfile์— ๋ช…์‹œ๋œ PEP 508 ๋งˆ์ปค์™€์˜ ํ˜ธํ™˜์„ฑ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • pipenv clean: Pipfile.lock์— ๋ช…์‹œ๋˜์ง€ ์•Š์€ ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ๊นจ๋—ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์ƒ ํ™˜๊ฒฝ ๊ด€๋ฆฌ ๋ช…๋ น์–ด

  • pipenv shell: ๊ฐ€์ƒ ํ™˜๊ฒฝ ๋‚ด์— ์‰˜์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ฐ€์ƒ ํ™˜๊ฒฝ์œผ๋กœ ํ•œ์ •ํ•˜์—ฌ ์ž‘์—…ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • pipenv --rm: ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์˜ ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์™„์ „ํžˆ ์‚ญ์ œํ•˜์ง€๋งŒ, Pipfile๊ณผ Pipfile.lock์€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€ ๋™๊ธฐํ™” ๋ฐ ์—…๋ฐ์ดํŠธ ๋ช…๋ น์–ด

  • pipenv sync: Pipfile.lock์— ๋ช…์‹œ๋œ ์ •ํ™•ํ•œ ํŒจํ‚ค์ง€ ๋ฒ„์ „์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒˆ๋กœ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž์™€ ํ™˜๊ฒฝ์„ ๋™๊ธฐํ™”ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • pipenv update: pipenv lock์„ ์‹คํ–‰ํ•˜์—ฌ ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ , ์ด์–ด์„œ pipenv sync๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์œ ์šฉํ•œ ์˜ต์…˜

  • --verbose: ์ƒ์„ธํ•œ ์ถœ๋ ฅ ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น ์‹คํ–‰ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ๋‚ด๋ถ€ ๊ณผ์ •์„ ๋” ์ž์„ธํžˆ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • --support: ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ์ง„๋‹จ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” GitHub ์ด์Šˆ ๋“ฑ์—์„œ ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ ํ•  ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • --python [version]: ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•  ํŠน์ • ํŒŒ์ด์ฌ ๋ฒ„์ „์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • --clear: pipenv, pip, ๋ฐ pip-tools ๊ด€๋ จ ์บ์‹œ๋ฅผ ๋ชจ๋‘ ์ง€์›๋‹ˆ๋‹ค. ์ด๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ์‹œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ ์ฒจ1

๐Ÿค” ๊ทธ๋ ‡๋‹ค๋ฉด ๊ธฐ์กด pip ์ค‘์— -U ๋˜๋Š” -q ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋ถ™์€ ๊ฒƒ๋“ค์€ ์–ด๋–ป๊ฒŒ ํ• ๊นŒ์š”?

1
2
3
4
pip install -q -U bitsandbytes
pip install -q -U git+https://github.com/huggingface/transformers.git
pip install -q -U git+https://github.com/huggingface/peft.git
pip install -q -U git+https://github.com/huggingface/accelerate.git

pipenv๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ข…์†์„ฑ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ํ•ญ์ƒ ๊ฐ€๋Šฅํ•œ ์ตœ์‹  ๋ฒ„์ „์˜ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ•˜๊ธฐ ๋•Œ๋ฌธ์— -U๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. pip โ†’ pipenv๋กœ ๋ณ€๊ฒฝ๋งŒ ํ•ด์ฃผ๋ฉด ์™„๋ฃŒ! ๐Ÿšฉ

1
2
3
pipenv install -q git+https://github.com/huggingface/transformers.git
pipenv install -q git+https://github.com/huggingface/peft.git
pipenv install -q git+https://github.com/huggingface/accelerate.git

โœ๏ธ (์ฐธ๊ณ ) pip ๋ช…๋ น์–ด์—์„œ ์‚ฌ์šฉํ•˜๋Š” -q์™€ -U ์˜ต์…˜์˜ ์˜๋ฏธ

-q (Quiet) : -q ์˜ต์…˜์€ โ€œquietโ€ ๋ชจ๋“œ๋กœ ์„ค์น˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ช…๋ น์–ด ์‹คํ–‰ ์‹œ ์ถœ๋ ฅ๋˜๋Š” ๋ฉ”์‹œ์ง€์˜ ์–‘์„ ์ค„์—ฌ์ค๋‹ˆ๋‹ค. ๋ณดํ†ต์€ ์„ค์น˜ ๊ณผ์ • ์ค‘์˜ ์ƒ์„ธํ•œ ์ •๋ณด๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. -qq๋กœ ์ง€์ •ํ•˜๋ฉด ์ถœ๋ ฅ์„ ๋”์šฑ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

-U (Upgrade) : -U ์˜ต์…˜์€ โ€œupgradeโ€์˜ ์•ฝ์ž๋กœ, ์ง€์ •๋œ ํŒจํ‚ค์ง€๋ฅผ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ผ๋Š” ์ง€์‹œ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํ•ด๋‹น ํŒจํ‚ค์ง€๊ฐ€ ์ด๋ฏธ ์‹œ์Šคํ…œ์— ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๋ฉด, -U ์˜ต์…˜์„ ํ†ตํ•ด ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ์ƒˆ๋กœ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

์œ ์ฒจ2

๋งŒ์•ฝ, pip install์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ–ˆ์ง€๋งŒ pipenv ํ™˜๊ฒฝ์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ, Pipfile์— ํ•ด๋‹น ํŒจํ‚ค์ง€๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” pipenv๊ฐ€ ํ”„๋กœ์ ํŠธ์˜ ์ข…์†์„ฑ์„ Pipfile๊ณผ Pipfile.lock์„ ํ†ตํ•ด ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์€ pipfile์— pip์œผ๋กœ ์„ค์น˜ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹จ๊ณ„๋ณ„๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

1. Pipfile ์—ด๊ธฐ

ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ Pipfile์„ ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๋กœ ์—ด์–ด์ค๋‹ˆ๋‹ค. Pipfile์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค.

2. ํŒจํ‚ค์ง€ ์ถ”๊ฐ€

Pipfile์˜ [packages] ์„น์…˜์— ์ถ”๊ฐ€ํ•˜๊ณ ์ž ํ•˜๋Š” ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ธฐ์žฌํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํŒจํ‚ค์ง€ ์ด๋ฆ„๊ณผ ์›ํ•˜๋Š” ๋ฒ„์ „ ๊ทœ์น™์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. *๋Š” ์ตœ์‹  ๋ฒ„์ „์„ ์ž๋™์œผ๋กœ ์„ ํƒํ•˜๋ผ๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค:

1
2
3
4
[packages]
requests = "*"  # ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•  ๋•Œ
flask = "==1.1.2"  # ํŠน์ • ๋ฒ„์ „์„ ๋ช…์‹œํ•˜๊ณ ์ž ํ•  ๋•Œ
numpy = ">=1.18.5"  # ์ตœ์†Œ ๋ฒ„์ „ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ช…์‹œํ•˜๊ณ ์ž ํ•  ๋•Œ

3. Pipfile.lock ์—…๋ฐ์ดํŠธ

์ˆ˜๋™์œผ๋กœ Pipfile์„ ํŽธ์ง‘ํ•œ ํ›„, Pipfile.lock์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ์ข…์†์„ฑ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ Pipfile์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ”ํƒ•์œผ๋กœ Pipfile.lock์„ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:

1
pipenv lock

4. ํŒจํ‚ค์ง€ ์„ค์น˜

์ˆ˜์ •๋œ Pipfile์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ Pipfile์— ๋ช…์‹œ๋œ ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ , Pipfile.lock๊ณผ ์ผ์น˜์‹œํ‚ต๋‹ˆ๋‹ค:

1
pipenv install

์ฃผ์˜์‚ฌํ•ญ

  • ๋ฒ„์ „ ํ˜ธํ™˜์„ฑ: ํŒจํ‚ค์ง€ ๋ฒ„์ „์„ ์ˆ˜๋™์œผ๋กœ ์ง€์ •ํ•  ๋•Œ๋Š” ํ˜ธํ™˜์„ฑ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ํ•˜๋ ค๋Š” ํŒจํ‚ค์ง€๊ฐ€ ํ”„๋กœ์ ํŠธ์— ์ด๋ฏธ ์žˆ๋Š” ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์™€ ํ˜ธํ™˜๋˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฌธ๋ฒ• ์˜ค๋ฅ˜: Pipfile์„ ํŽธ์ง‘ํ•  ๋•Œ ๋ฌธ๋ฒ•์„ ์ •ํ™•ํ•˜๊ฒŒ ์ง€์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค. TOML ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋Š” pipenv ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜๋„ ๊ธด ๊ธ€ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค โœŒ



-->