๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

pyenv, venv ์ •๋ฆฌ

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2025. 6. 15.

ํŒŒ์ด์ฌ์„ ์„ค์น˜ํ•˜๋ฉด์„œ ์•Œ๊ฒŒ ๋œ ๋‚ด์šฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฐ”๋กœ pyenv, venv์ด๋‹ค. ์ด ๋‘˜์„ ์šฉ๋„๋Š” ์•Œ์ง€๋งŒ ๋ช…ํ™•ํ•˜์ง€ ๋ชปํ•ด์„œ ์ •๋ฆฌํ•˜๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 


1. pyenv

๋ชฉ์ : ๋‹ค์–‘ํ•œ Python ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฒ„์ „์„ ์„ค์น˜•๊ด€๋ฆฌํ•˜๊ณ , ์ „์—ญ(global)•ํ”„๋กœ์ ํŠธ(local)•์‰˜(shell) ๋‹จ์œ„๋กœ ๋ฒ„์ „์„ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ„์ „ ๊ด€๋ฆฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

 

์„ค์น˜: brew๋กœ ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

brew install pyenv

 

์ฃผ์š”๊ธฐ๋Šฅ:

  • pyenv install <version>์œผ๋กœ ์›ํ•˜๋Š” Python ๋ฒ„์ „ ์„ค์น˜
  • pyenv global/local/shell <version> ์œผ๋กœ ํ™œ์„ฑ ๋ฒ„์ „ ์ „ํ™˜
  • ํ”Œ๋Ÿฌ๊ทธ์ธ (์˜ˆ: pyenv-virtualenv)์„ ํ†ตํ•ด ๊ฐ€์ƒํ™˜๊ฒฝ ํ†ตํ•ฉ ๊ด€๋ฆฌ๋„ ๊ฐ€๋Šฅ

์˜ˆ์‹œ:

global

# 1) ๊ธ€๋กœ๋ฒŒ(default) ๋ฒ„์ „ ์„ค์ •
# ์‹œ์Šคํ…œ ์ „์ฒด(๋กœ๊ทธ์ธ ์„ธ์…˜)์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•  Python ๋ฒ„์ „์„ 3.10.6์œผ๋กœ ์ง€์ •
$ pyenv global 3.10.6
$ python -V
Python 3.10.6

 

local

# 2) ๋กœ์ปฌ(project) ๋ฒ„์ „ ์„ค์ •
# ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ(my-project) ๋ฐ ๊ทธ ํ•˜์œ„์—์„œ๋งŒ Python 3.8.0์„ ์‚ฌ์šฉ
$ cd my-project
$ pyenv local 3.8.0
# ์ด ๋ช…๋ น ์‹คํ–‰ ์‹œ my-project/.python-version ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
$ python -V
Python 3.8.0

 

shell

# 3) ์‰˜(session) ์ „์šฉ ๋ฒ„์ „ ์„ค์ •
# ํ˜„์žฌ ํ„ฐ๋ฏธ๋„ ์„ธ์…˜์—์„œ๋งŒ ์ž ์‹œ Python 3.9.1์„ ์‚ฌ์šฉํ•˜๊ณ , ์„ธ์…˜ ์ข…๋ฃŒ๋‚˜ ์žฌ๋กœ๊ทธ์ธ ์‹œ ํ•ด์ œ
$ pyenv shell 3.9.1
$ python -V
Python 3.9.1

# ์›๋ž˜ ๋ฒ„์ „์œผ๋กœ ๋ณต๊ท€ํ•˜๋ ค๋ฉด
$ pyenv shell --unset
$ python -V
# (๊ธ€๋กœ๋ฒŒ ๋˜๋Š” ๋กœ์ปฌ์— ์ง€์ •๋œ ๋ฒ„์ „์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค)

 

 

2. venv

๋ชฉ์ : Python 3.3์ด์ƒ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํฌํ•จ๋œ ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ ๋„๊ตฌ๋กœ, ํŠน์ • python ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๊ธฐ๋ฐ˜์˜ ๋…๋ฆฝ๋œ ํŒจํ‚ค์ง€ ๊ฒฉ๋ฆฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

์„ค์น˜: ๋ณ„๋„ ์„ค์น˜ ๋ถˆํ•„์š”(python3 -m venv <env> ๋ช…๋ น ์‚ฌ์šฉ)

 

์ฃผ์š” ๊ธฐ๋Šฅ:

  • python -m venv ~/myenv (~/myenv ๋กœ ํ•˜๋ฉด home ํ•˜์œ„์— ์ƒ์„ฑ ๋จ ์›ํ•˜๋Š” ๊ฒฝ๋กœ๋กœ ํ•ด์ฃผ๋ฉด ๋จ)
  • ์‹คํ–‰
    • source ~/myenv/bin/activate
  • ์ข…๋ฃŒ
    • deactivate

 

3. pyenv vs venv ๋น„๊ต

๊ตฌ๋ถ„ pyenv venv
์—ญํ•  python ๋ฒ„์ „ ๊ด€๋ฆฌ python ํŒจํ‚ค์ง€ ๊ฒฉ๋ฆฌ•๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ
๋ฒ”์œ„ ์ „์—ญ/ํ”„๋กœ์ ํŠธ/์‰˜ ๋‹จ์œ„ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์ „ํ™˜ ๋‹จ์ผ ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ ํŒจํ‚ค์ง€ ๋…๋ฆฝ
์„ค์น˜ Github -> ์‰˜ ์„ค์ • ํŒŒ์ผ์— ์ดˆ๊ธฐํ™” ์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€ python 3.3+ ๊ธฐ๋ณธ ๋‚ด์žฅ (-m venv)
ํ™œ์šฉ ์˜ˆ pyenv install 3.10.6 -> pyenv local 3.10.6 python -m venv .venf -> source .venv/bin/activate
ํ™•์žฅ์„ฑ ํ”Œ๋Ÿฌ๊ทธ์ธ ํ†ตํ•ด virtualenv ๋“ฑ๊ณผ ์—ฐ๋™ ๊ฐ€๋Šฅ ์ตœ์†Œ ๊ธฐ๋Šฅ, ๋ณต์žกํ•œ ์˜ต์…˜์€ virtualenv ๊ถŒ์žฅ

 

 

4. ์ถ”๊ฐ€ ๋‚ด์šฉ (virtualenv)

Virtualenv:

 virtualenv๋Š” python ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ๋…๋ฆฝ์  ์‹คํ–‰ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ์„œ๋“œํŒŒํ‹ฐ ๋„๊ตฌ ์ž…๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ์ „์ฒด์— ์„ค์น˜๋œ Python๊ณผ๋Š” ๋ณ„๋„๋กœ, ํŠน์ • ๋ฒ„์ „์˜ Python ์ธํ„ฐํ”„๋ฆฌํ„ฐ์™€ pip•setyptolls•wheel ๊ฐ™์€ ํ•„์ˆ˜ ํŒจํ‚ค์ง€๋ฅผ ๊ฒฉ๋ฆฌ๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์„ค์น˜ํ•ด์ค๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ๋ณด๋ฉด venv์™€ ๋น„์Šทํ•  ์ˆ˜ ์žˆ์ง€๋งŒ venv๋ณด๋‹ค ๋” ๋ณต์žกํ•œ ์˜ต์…˜์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํŠน์ง•:

  • ์ „์—ญ(Global) ์„ค์น˜๋ฅผ ํ”ผํ•˜๊ณ , ํ”„๋กœ์ ํŠธ๋ณ„๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „์„ ๊ณต์กด์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Python 2.x/3.x ๋ชจ๋‘์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€