[Python] ๊ฐ€์ƒํ™˜๊ฒฝ(Pyenv, Pipenv)

yeonddoriยท2023๋…„ 3์›” 5์ผ
0

AID_WEB

๋ชฉ๋ก ๋ณด๊ธฐ
1/14

๐Ÿ“ ๊ฐ€์ƒํ™˜๊ฒฝ์ด๋ž€?

ํŒŒ์ด์ฌ ๋ฒ„์ „๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „์„ ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ๋ฒ„์ „์˜ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ๊ฒƒ์œผ๋กœ ๋…๋ฆฝ์ ์ธ ํŒŒ์ด์ฌ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด๋Š” pip์„ ํ™œ์šฉํ•œ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์˜ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•ด์ฃผ๋ฉฐ ํ”„๋กœ์ ํŠธ๋ณ„๋กœ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿ“ Pyenv

Pyenv๋Š” ํŒŒ์ด์ฌ์— ๋Œ€ํ•œ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜์—ฌ ํŒŒ์ด์ฌ ๋ฒ„์ „์— ๋Œ€ํ•œ ์˜์กด์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

์„ค์น˜ ๋ฐฉ๋ฒ•(windows)

์ผ๋ฐ˜์ ์ธ pyenv๋Š” windows์—์„œ ์„ค์น˜๊ฐ€ ์•ˆ ๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ช‡ ์‹œ๊ฐ„ ์ฐพ์•„๋ณธ ํ›„์—์•ผ ๊นจ๋‹ซ๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๋ถˆํ–‰ ์ค‘ ๋‹คํ–‰์œผ๋กœ ์›๋ž˜ windows ์ง€์›์„ ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ 22๋…„๋„ ์ดํ›„ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์ด ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๊ฒจ์šฐ ์„ค์น˜ ๋ฐ ์‹คํ–‰์„ ์„ฑ๊ณตํ•˜์˜€๊ณ , ๊ทธ ๊ณผ์ •์„ windows11 ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…ํ•˜๊ณ ์ž ํ•œ๋‹ค.

1. ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ(cmd)์—์„œ pyenv-win ์„ค์น˜
pip install pyenv-win --target %USERPROFILE%\.pyenv

2. ํ•ด๋‹น path๋ฅผ ํ™˜๊ฒฝ๋ณ€์ˆ˜์— ์ถ”๊ฐ€

  • windows ์„ค์ • โ†’ ์‹œ์Šคํ…œ โ†’ ์ •๋ณด โ†’ ๊ณ ๊ธ‰ ์‹œ์Šคํ…œ ์„ค์ • โ†’ ํ™˜๊ฒฝ ๋ณ€์ˆ˜
  • windows ๊ฒ€์ƒ‰ โ†’ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํŽธ์ง‘ โ†’ ํ™˜๊ฒฝ ๋ณ€์ˆ˜

    ์œ„์˜ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ ํŽธํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ๋“ค์–ด๊ฐ„๋‹ค.

    ์‹œ์Šคํ…œ ๋ณ€์ˆ˜์—์„œ ์ƒˆ๋กœ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์•„๋ž˜ ๋‘ ๊ฐ€์ง€๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

    1) ๋ณ€์ˆ˜ ์ด๋ฆ„: PYENV
    ย ย ย ย ๋ณ€์ˆ˜ ๊ฐ’: C:\Users\์‚ฌ์šฉ์žid\.pyenv\pyenv-win\bin

    2) ๋ณ€์ˆ˜ ์ด๋ฆ„: PYENV_HOME
    ย ย ย ย ๋ณ€์ˆ˜ ๊ฐ’: C:\Users\์‚ฌ์šฉ์žid\.pyenv\pyenv-win\


    ์—ฌ๊ธฐ์„œ PYENV๋Š” ์‚ฌ์šฉ์žid์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ๋ณ€์ˆ˜์—์„œ Path ๋ถ€๋ถ„ ํŽธ์ง‘์„ ๋ˆ„๋ฅธ ํ›„ ์ƒˆ๋กœ ๋งŒ๋“ค๊ธฐ๋กœ ๋ณ€์ˆ˜ ๊ฐ’์„ ์ž…๋ ฅํ•˜์—ฌ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

3. ์„ค์น˜ ํ™•์ธ
๋ช…๋ น ํ”„๋กฌํ”„ํŠธ(cmd)์—์„œ pyenv๋ฅผ ์ž…๋ ฅ ํ›„ ์ด๋Ÿฐ ์ฐฝ์ด ๋œฌ๋‹ค๋ฉด ์ œ๋Œ€๋กœ ์„ค์น˜๋œ ๊ฒƒ์ด๋‹ค.


+ ์ถ”๊ฐ€ ๋‚ด์šฉ

pyenv ์ •์‹ ๋‹ค์šด ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๊นƒํ—™ ์‚ฌ์ดํŠธ์—์„œ Quick start ๋ถ€๋ถ„์„ ๋ณด๋ฉด ๋œ๋‹ค. ํ•ญ์ƒ ์ด๋Ÿฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋‹ค์šด์ด ์•ˆ ๋˜๋Š” ์ค„ ์•Œ์•˜๋Š”๋ฐ ์ด๋Š” ์œˆ๋„์šฐ ์‹คํ–‰ ์ •์ฑ… ๋•Œ๋ฌธ์ด์—ˆ๊ณ , ์‹คํ–‰ ์ •์ฑ…์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ์‹คํ–‰ ์ •์ฑ…์˜ ์ •๋ณด๋Š” ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‹คํ–‰ ์ •์ฑ… ๋ณ€๊ฒฝ์„ ์œ„ํ•ด Windows PowerShell์„ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰ ํ›„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์น˜๋ฉด ๋œ๋‹ค.
Set-ExecutionPolicy RemoteSigned

ํ˜น์€ Set-ExecutionPolicy Unrestricted ๋ช…๋ น์–ด๋ฅผ ์ณ๋„ ๋˜์ง€๋งŒ, ์‹คํ–‰ ์ •์ฑ…์„ ์ฝ์–ด๋ณด๋ฉด Unrestricted๋Š” ์ œํ•œ ์—†์ด ๋ชจ๋“  ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์— ๋” ์ทจ์•ฝํ•˜๋ฏ€๋กœ ์œ„์˜ ๋ช…๋ น์–ด๋ฅผ ์น˜๋Š” ๊ฒƒ์ด ๋ณด์•ˆ์„ฑ์ด ๋” ์ข‹์„ ๊ฒƒ์ด๋‹ค.

์‹คํ–‰ ์ •์ฑ…์„ ๋ณ€๊ฒฝํ•˜์˜€๋‹ค๋ฉด ์ด์ œ ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ pyenv๋ฅผ ๋‹ค์šด๋ฐ›์œผ๋ฉด ๋œ๋‹ค.
Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"


์‚ฌ์šฉ๋ฒ•

  • ์„ค์น˜ ๊ฐ€๋Šฅํ•œ python ๋ฒ„์ „ ๋ชฉ๋ก ํ™•์ธ
    pyenv install --list or pyenv install -l

  • python 3.10.3 ๋ฒ„์ „์œผ๋กœ ์„ค์น˜
    pyenv install 3.10.3

  • pyenv์˜ python ๋ฒ„์ „ ํ™•์ธ
    pyenv version

  • ์„ค์น˜ํ•œ python ๋ฒ„์ „ ๋ชฉ๋ก ํ™•์ธ
    pyenv versions

  • pyenv์˜ ์—…๋ฐ์ดํŠธ
    pip install --upgrade pyenv-win

  • ๊ธฐ๋ณธ ์ ์šฉํ•  python ๋ฒ„์ „ ์ง€์ •
    pyenv global 3.10.3

  • ํ•ด๋‹น ํด๋”์— ์‚ฌ์šฉํ•  python ๋ฒ„์ „ ์ง€์ •
    pyenv local 3.10.3

  • ์„ค์น˜๋œ ํŠน์ • ๋ฒ„์ „์˜ python ์ œ๊ฑฐ
    pyenv uninstall 3.10.3

์˜ค๋ฅ˜ ๋ฐ ํ•œ๊ณ„

  • pyenv-virtualenv ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•ด์•ผ ๊ฐ€์ƒํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ windows ๋ฒ„์ „์—์„œ๋Š” ์•„์ง ์ ์šฉ์ด ์•ˆ ๋˜๋Š” ๊ฒƒ์ธ์ง€ ํ˜น์€ ๋‚ด๊ฐ€ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์ธ์ง€ ์„ค์น˜๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

  • pyenv ์„ค์น˜๋Š” ๋˜์—ˆ์ง€๋งŒ pyenv global ๋ช…๋ น์–ด ์ˆ˜ํ–‰์ด ๋˜์ง€ ์•Š๋Š”๋‹ค. python --version์œผ๋กœ ํ™•์ธํ•ด๋ณธ ๊ฒฐ๊ณผ ์ „ํ™˜๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

    • ์„ค์น˜๋˜์–ด ์žˆ๋Š” ํŒŒ์ด์ฌ๋„ ์ง€์›Œ๋ณด๊ณ  ๋ช…๋ น์–ด๋กœ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋‹ค์‹œ ์„ค์ •ํ•ด๋ณด๋Š” ๋“ฑ ํ•ด๋ณด๋ผ๋Š” ํ•ด๊ฒฐ์ฑ…์€ ๋‹ค ํ•ด๋ดค์ง€๋งŒ ๋๋‚ด ๊ณ ์น˜์ง€ ๋ชปํ•˜์˜€๋‹ค.

+ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ(pyenv global)

ํŒŒ์ด์ฌ ๋ฒ„์ „์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ๊ทผ๋ณธ์ ์ธ ์›์ธ์ด ๋ฌด์—‡์ธ์ง€ ์ƒ๊ฐํ•ด๋ณด๋˜ ์ค‘ PATH ๊ฒฝ๋กœ์— python์„ ์ถ”๊ฐ€ํ•ด๋†“์€ ๊ฒƒ์ด ์ƒ๊ฐ๋‚ฌ๋‹ค. ์ด๋Š” ๋ณดํ†ต python์„ ์ฒ˜์Œ ๊น” ๋•Œ Add Python x.x.x to PATH ๋ผ๊ณ  ์ ํžŒ ์ฒดํฌ๋ฐ•์Šค๋ฅผ ์ฒดํฌํ•˜์—ฌ ์„ค์น˜ํ•˜๊ธฐ์— ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋˜์–ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ pyenv๋ฅผ ํ†ตํ•ด ํŒŒ์ด์ฌ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„  PATH์— pyenv ๊ฒฝ๋กœ ์™ธ์— python ๊ฒฝ๋กœ์˜ ์˜ํ–ฅ์„ ๋ฐ›์œผ๋ฉด ์•ˆ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ๋“ค์–ด๊ฐ€ PATH์—์„œ python ๊ฒฝ๋กœ๋ฅผ ์—†์• ๋‹ˆ pyenv global ๋ช…๋ น์–ด๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์˜€๋‹ค.


๐Ÿ“ Pipenv

Pipenv๋Š” ํŒŒ์ด์ฌ์—์„œ ๊ณต์‹์œผ๋กœ ๊ถŒ์žฅํ•˜๋Š” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ํˆด๋กœ, ๊ธฐ๋ณธ์ ์œผ๋กœ pip์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜์ง€๋งŒ ํ”„๋กœ์ ํŠธ ๋ณ„๋กœ ๋…๋ฆฝ๋œ ๊ฐ€์ƒ ํ™˜๊ฒฝ๊ณผ ํ”„๋กœ์ ํŠธ ๋‹จ์œ„์˜ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

์„ค์น˜ ๋ฐฉ๋ฒ•(windows)

๋ช…๋ น ํ”„๋กฌํ”„ํŠธ(cmd)์—์„œ pipenv ์„ค์น˜
pip install pipenv

๊ฐ€์ƒํ™˜๊ฒฝ ์‚ฌ์šฉ๋ฒ•

  • ๊ฐ€์ƒํ™˜๊ฒฝ์œผ๋กœ ์‚ฌ์šฉํ•  ํด๋” ์ƒ์„ฑ ๋ฐ ์ ‘๊ทผ
    mkdir test_python
    cd test_python

  • ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ
    pipenv --python 3.10.3

  • ๊ฐ€์ƒํ™˜๊ฒฝ ์‹คํ–‰
    pipenv shell

  • ๊ฐ€์ƒํ™˜๊ฒฝ ์ข…๋ฃŒ
    exit

  • ๊ฐ€์ƒํ™˜๊ฒฝ ์ œ๊ฑฐ
    pipenv --rm

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

์‹คํ–‰์— ํ•„์š”ํ•œ ํŒจํ‚ค์ง€์™€ ๊ฐœ๋ฐœ์—๋งŒ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•ด์„œ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์˜ˆ๋ฅผ ๋“ค์–ด pytest ํŒจํ‚ค์ง€์˜ ๊ฒฝ์šฐ --dev ์˜ต์…˜์„ ์ฃผ์–ด dev depenency๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์‹คํ–‰์— ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜
    pipenv install pandas

  • ๊ฐœ๋ฐœ์—๋งŒ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜
    pipenv install pytest --dev

Pipfile

๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ํŒŒ์ผ๋กœ ํ•ด๋‹น ๊ฐ€์ƒํ™˜๊ฒฝ์— ์„ค์น˜๋œ ํŒŒ์ด์ฌ ๋ฒ„์ „, ํŒจํ‚ค์ง€๋ณ„ ์ด๋ฆ„๊ณผ ๋ฒ„์ „์„ ๊ธฐ๋กํ•œ๋‹ค. ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋ฉด [packages] ๋˜๋Š” [dev-packages] ํ•ญ๋ชฉ์— ์„ค์น˜๋œ ํŒจํ‚ค์ง€๊ฐ€ ๋ช…์‹œ๋œ๋‹ค.

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

๐Ÿช„ ๋งˆ์น˜๋ฉด์„œ

pyenv์˜ ๋ฒ„์ „ ์ด๋™ ๊ธฐ๋Šฅ๊ณผ pipenv์˜ ๊ฐ€์ƒํ™˜๊ฒฝ ๊ธฐ๋Šฅ์„ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด์„œ ํ™˜๊ฒฝ ์„ค์ •์„ ํ•œ๋‹ค๋ฉด ์›ํ™œํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. pipenv๋Š” ํŠนํžˆ ํŒŒ์ด์ฌ ๊ณต์‹ ์‚ฌ์ดํŠธ์—์„œ๋„ ๊ถŒ์žฅํ•˜๋Š” ๋งŒํผ ๊ธฐ๋Šฅ๊ณผ ์‚ฌ์šฉ๋ฒ•์ด ์ข‹์•„ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ์ข‹์„ ๋“ฏํ•˜๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด