pyenv๋ž€?

pyenv๋Š” ๋‹ค์–‘ํ•œ Python ๋ฒ„์ „์„ ์†์‰ฝ๊ฒŒ ์„ค์น˜, ๊ด€๋ฆฌ, ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฒ„์ „ ๊ด€๋ฆฌ ๋„๊ตฌ์ด๋‹ค.
์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ Python ๋ฒ„์ „์ด ํ•„์š”ํ•  ๋•Œ ๋ฒ„์ „ ์ถฉ๋Œ ์—†์ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ  ์‹œ์Šคํ…œ์— ๊ธฐ๋ณธ ์„ค์น˜๋œ Python์„ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ , ์‚ฌ์šฉ์ž๋ณ„๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ์šด์˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ฃผ์š” ํŠน์ง•
  • ์—ฌ๋Ÿฌ Python ๋ฒ„์ „ ์„ค์น˜ ๋ฐ ์ „ํ™˜ (์˜ˆ: 2.7, 3.8, 3.12 ๋“ฑ)
  • ๋””๋ ‰ํ† ๋ฆฌ๋ณ„(local), ์ „์—ญ(global), ์…ธ(session) ๋‹จ์œ„๋กœ Python ๋ฒ„์ „ ์ง€์ •
  • .python-version ํŒŒ์ผ๋กœ ํ”„๋กœ์ ํŠธ๋ณ„ Python ๋ฒ„์ „ ๊ณ ์ •
  • ๋‹ค์–‘ํ•œ ํŒŒ์ƒ Python(CPython, Anaconda, PyPy ๋“ฑ)๋„ ์ง€์›

pyenv-virtualenv๋ž€?

pyenv-virtualenv๋Š” pyenv์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ, Python ๊ฐ€์ƒํ™˜๊ฒฝ(virtual environment) ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ ์ œ๊ณตํ•œ๋‹ค
๊ฐ Python ๋ฒ„์ „๋ณ„๋กœ ์™„์ „ํžˆ ๊ฒฉ๋ฆฌ๋œ ํŒจํ‚ค์ง€ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค

์ฃผ์š” ํŠน์ง•
  • pyenv๋กœ ์„ค์น˜ํ•œ ๊ฐ Python ๋ฒ„์ „์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ ๋ฐ ์ „ํ™˜ ๊ฐ€๋Šฅ
  • ๊ฐ€์ƒํ™˜๊ฒฝ๋งˆ๋‹ค ๋…๋ฆฝ์ ์œผ๋กœ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ยท์‚ฌ์šฉ, ํ”„๋กœ์ ํŠธ๋ณ„ ์˜์กด์„ฑ ์ถฉ๋Œ ์ตœ์†Œํ™”
  • ๋””๋ ‰ํ† ๋ฆฌ๋ณ„๋กœ ํŠน์ • ๊ฐ€์ƒํ™˜๊ฒฝ ์ž๋™ ํ™œ์„ฑํ™” ๊ฐ€๋Šฅ (์ž๋™ ์ „ํ™˜)

pyenv vs conda: ์–ธ์ œ ์–ด๋–ค ๋„๊ตฌ๋ฅผ ์“ธ๊นŒ?

๋ณดํ†ต ๊ฐ€์ƒํ™˜๊ฒฝ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜๋กœ conda๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฐจ์ด์ ์„ ์•Œ์•„๋ณด์ž

conda๋ž€?

conda๋Š” Anaconda/Miniconda ๋ฐฐํฌํŒ์—์„œ ์ œ๊ณตํ•˜๋Š” ํ™˜๊ฒฝ ๋ฐ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ๋„๊ตฌ์ด๋‹ค.

Python๋ฟ ์•„๋‹ˆ๋ผ R, Julia ๋“ฑ ๋‹ค์–‘ํ•œ ์–ธ์–ด์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํŒจํ‚ค์ง€๊นŒ์ง€ ํ•œ ๋ฒˆ์— ํ†ตํ•ฉ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•˜๊ณ 
ํŠนํžˆ ๊ณผํ•™, ๋ฐ์ดํ„ฐ๋ถ„์„, ๋จธ์‹ ๋Ÿฌ๋‹ ๋ถ„์•ผ์—์„œ ๋Œ€ํ˜• ํŒจํ‚ค์ง€ ์„ค์น˜ยทํ˜ธํ™˜์„ฑ์— ๊ฐ•์ ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค.
๋˜ํ•œ conda๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด pip ๊ณผ ๊ฐ™์€ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž ์—ญํ• ๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค

์ฆ‰, ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ + Python ๋ฒ„์ „ ๊ด€๋ฆฌ + ๊ฐ€์ƒํ™˜๊ฒฝ ๊ด€๋ฆฌ + ์ถ”๊ฐ€ ๊ณผํ•™, ๋ฐ์ดํ„ฐ๋ถ„์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊นŒ์ง€ ๋ชจ๋‘ ์ œ๊ณตํ•ด์ค€๋‹ค.

pyenv, conda ๋น„๊ต
๊ตฌ๋ถ„pyenv (+pyenv-virtualenv)conda
๊ด€๋ฆฌ ๋Œ€์ƒPython ๋ฒ„์ „ / ๊ฐ€์ƒํ™˜๊ฒฝPython / R / ํŒจํ‚ค์ง€ / ํ™˜๊ฒฝ ํ†ตํ•ฉ
ํ™˜๊ฒฝ ๊ฒฉ๋ฆฌvenv / virtualenv๋กœ ๊ฒฉ๋ฆฌํ™˜๊ฒฝ ๋‹จ์œ„๋กœ ์™„์ „ ๊ฒฉ๋ฆฌ
ํŒจํ‚ค์ง€ ๊ด€๋ฆฌpipconda / pip ๋ชจ๋‘ ์ง€์›
๊ฐ•์ ๊ฐ€๋ณ๊ณ  OS ์‹œ์Šคํ…œ ์˜ํ–ฅ ์—†์ŒํŒจํ‚ค์ง€ ํ˜ธํ™˜์„ฑ, ๋Œ€ํ˜• ๊ณผํ•™ ํŒจํ‚ค์ง€ ๊ฐ•์ 
๋‹จ์ ํŒจํ‚ค์ง€ ์˜์กด์„ฑ ์ถฉ๋Œ ๋ณ„๋„ ๊ด€๋ฆฌ ํ•„์š”๋ฌด๊ฒ๊ณ  ๋””์Šคํฌ ์‚ฌ์šฉ ๋งŽ์„ ์ˆ˜ ์žˆ์Œ
์ถ”์ฒœ ๊ธฐ์ค€
  • ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ Python์„ ๊ฐ€๋ณ๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ , ํ”„๋กœ์ ํŠธ๋ณ„๋กœ ๋…๋ฆฝ์ ์ธ ๊ฐ€์ƒํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜๊ณ  ์‹ถ๋‹ค โ‡’ pyenv + pyenv-virtualenv

    • ๊ฐœ๋ฐœ, ์›น, ์ž๋™ํ™” ๋“ฑ ์ผ๋ฐ˜์ ์ธ Python ํ”„๋กœ์ ํŠธ์—๋Š” ์ด ์กฐํ•ฉ์ด ๊ฐ€์žฅ ์‹ฌํ”Œํ•˜๊ณ  ๋น ๋ฅด๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋ถ„์„์ด๋‚˜ ๋จธ์‹ ๋Ÿฌ๋‹์ฒ˜๋Ÿผ ๋ณต์žกํ•œ ํŒจํ‚ค์ง€ ์˜์กด์„ฑ, ย ๋˜๋Š” Python ์™ธ์—๋„ R, Julia ๋“ฑ ๋‹ค์–‘ํ•œ ์–ธ์–ด์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•œ ๋ฒˆ์— ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค โ‡’conda

    • ๋Œ€ํ˜• ๊ณผํ•™ ํŒจํ‚ค์ง€, ๋‹ค์–‘ํ•œ OS ํ™˜๊ฒฝ์—์„œ์˜ ํ˜ธํ™˜์„ฑ, ์„ค์น˜ ํŽธ์˜์„ฑ์ด ์ค‘์š”ํ•œ ์ƒํ™ฉ์— conda๋ฅผ ์ถ”์ฒœํ•œ๋‹ค.

pyenv ๋ช…๋ น์–ด

  • pyenv ์„ค์น˜ (macOS)

    brew install pyenv
  • ์…ธ์— pyenv ํ™˜๊ฒฝ ์ ์šฉ (.zshrc) : ์ฐธ๊ณ 

    echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
    echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
    echo 'eval "$(pyenv init - zsh)"' >> ~/.zshrc
  • ์„ค์น˜ ๊ฐ€๋Šฅํ•œ Python ๋ชฉ๋ก ๋ณด๊ธฐ

     pyenv install --list
  • Python ๋ฒ„์ „ ์„ค์น˜

     pyenv install 3.12.3
  • ์„ค์น˜๋œ Python ๋ชฉ๋ก ๋ณด๊ธฐ

     pyenv versions
  • ๊ธฐ๋ณธ(global) Python ๋ฒ„์ „ ์„ค์ •

     pyenv global 3.12.3
  • ๋””๋ ‰ํ† ๋ฆฌ(local)๋ณ„ Python ๋ฒ„์ „ ์„ค์ •

     pyenv local 3.10.13
  • ํ˜„์žฌ ์…ธ(session)์—์„œ๋งŒ ๋ฒ„์ „ ์„ค์ •

     pyenv shell 3.9.18
  • ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ Python ๋ฒ„์ „ ํ™•์ธ

     pyenv version
  • pyenv๋กœ ์„ค์น˜ํ•œ Python ๊ฒฝ๋กœ ํ™•์ธ

     pyenv which python

pyenv-virtualenv ๋ช…๋ น์–ด

  • pyenv-virtualenv ์„ค์น˜ (macOS)

    brew install pyenv-virtualenv
  • shell์— pyenv-virtualenv ํ™˜๊ฒฝ ์ ์šฉ

    eval "$(pyenv virtualenv-init -)"
  • ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ

     pyenv virtualenv 3.11.8 myenv311
  • ๊ฐ€์ƒํ™˜๊ฒฝ ๋ชฉ๋ก ๋ณด๊ธฐ

     pyenv virtualenvs
  • ๊ฐ€์ƒํ™˜๊ฒฝ ์ œ๊ฑฐ

     pyenv uninstall myenv311
  • ๋””๋ ‰ํ† ๋ฆฌ์— ๊ฐ€์ƒํ™˜๊ฒฝ ์ง€์ •

     pyenv local myenv311