๐Ÿ’ญ Minji's Archive

[s2n] python venv ์™„์ „์ •๋ณต

November 12, 2025

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋„ venv๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ์ด๊ฒŒ ๋ญ”์ง€, ์™œ ์“ฐ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ๊ฐœ๋…์„ ์ •๋ฆฌํ•ด ๋ณด๊ณ ์ž ์ด ํฌ์ŠคํŒ…์„ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

1. venv๋ž€?

= virtual environment ์ฆ‰, ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ๋…๋ฆฝ๋œ ํŒŒ์ด์ฌ ํ™˜๊ฒฝ(ํŒŒ์ด์ฌ ๋ฒ„์ „ + ํŒจํ‚ค์ง€ ๋ชฉ๋ก)์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ธฐ์ˆ ์ด๋‹ค. ์ด ํ™˜๊ฒฝ ์•ˆ์—๋Š” ํŒŒ์ด์ฌ ์‹คํ–‰ํŒŒ์ผ, pip ํŒจํ‚ค์ง€, ์šฐ๋ฆฌ๊ฐ€ ์„ค์น˜ํ•œ ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ชจ๋‘ ํ”„๋กœ์ ํŠธ ์ „์šฉ์œผ๋กœ ๋”ฐ๋กœ ์ €์žฅ๋œ๋‹ค. ์ฆ‰, ์‹œ์Šคํ…œ ์ „์ฒด์˜ ํŒŒ์ด์ฌ๊ณผ ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š”๋‹ค!

2. venv๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š”?

(1) ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ๋‹ค๋ฅธ ํŒจํ‚ค์ง€ ๋ฒ„์ „์ด ํ•„์š”ํ•จ

์˜ˆ๋ฅผ ๋“ค์–ด, ํ”„๋กœ์ ํŠธ A๋Š” Django==3.2, B๋Š” Django==5.0 ๋กœ ๋˜์–ด ์žˆ๋‹ค๊ณ  ํ•˜์ž. venv๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด, pip install์„ ํ•˜๋ฉด ์‹œ์Šคํ…œ ์ „์ฒด ํŒจํ‚ค์ง€๊ฐ€ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค. A/B๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฒ„์ „์„ ํ•„์š”๋กœ ํ•จ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋‘˜ ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐ˜๋“œ์‹œ ๊นจ์ง„๋‹ค. ์ฆ‰ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๊ผฌ์ด๊ณ , import ์—๋Ÿฌ๊ฐ€ ๋œจ๊ณ , ํ”„๋กœ์ ํŠธ ์žฌํ˜„์ด ์–ด๋ ค์›Œ์ง„๋‹ค. venv๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, A์˜ venv์—๋Š” 3.2, B์˜ venv์—๋Š” 5.0์ด ๋…๋ฆฝ์ ์ธ ๊ณต๊ฐ„์—์„œ ์‚ฌ์šฉ๋˜์–ด ์ ˆ๋Œ€ ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š”๋‹ค.

(2) ํŒ€ ํ”„๋กœ์ ํŠธ์—์„œ ํ™˜๊ฒฝ ํ†ต์ผ์ด ์•ˆ ๋˜๋ฉด ์žฌํ˜„์ด ์•ˆ ๋จ!

  • ๋‚œ ๋˜๋Š”๋ฐ ์™œ ๋„Œ ์•ˆ ๋จ?
  • pip ํŒจํ‚ค์ง€ ๋ฒ„์ „ ๋ญ๋”๋ผ?
  • ๋‚œ ๋กœ์ปฌ์—์„œ 3.11๋กœ ํ–ˆ๋Š”๋ฐ ๋„Œ ์™œ 3.10์ด์•ผ?
  • ํŒจํ‚ค์ง€ ๋ฒ„์ „ ๋‹ฌ๋ผ์„œ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ

์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๊ฒช์–ด๋ณธ ์ ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ํŠนํžˆ ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ๋Š” beautifulsoup, selenium, requests, pytest ๋“ฑ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ๋งŽ์•„์„œ ์˜์กด์„ฑ์ด ๋ณต์žกํ•ด ํŒ€์› ํ•œ๋ช…์ด๋ผ๋„ ๋ฒ„์ „์ด ์–ด๊ธ‹๋‚˜๋ฉด ์ „์ฒด๊ฐ€ ๊นจ์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด venv + requirements.txt ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ํŒ€์›์ด ์™„๋ฒฝํžˆ ๋™์ผํ•œ ํ™˜๊ฒฝ์—์„œ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

(3) ์‹œ์Šคํ…œ ํŒŒ์ด์ฌ์„ ๋ง๊ฐ€๋œจ๋ฆฌ์ง€ ์•Š๊ธฐ ์œ„ํ•ด

macOS๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์—ฌ๋Ÿฌ ์‹œ์Šคํ…œ ๋„๊ตฌ๊ฐ€ ํŒŒ์ด์ฌ์— ์˜์กดํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ pip๋กœ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋‹ค ๋ณด๋ฉด

  • ์‹œ์Šคํ…œ ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฎ์–ด์“ฐ๊ธฐ
  • ๋งฅ ๊ธฐ๋ณธ ๋„๊ตฌ ๊ณ ์žฅ
  • PATH ์ถฉ๋Œ๋กœ ํŒŒ์ด์ฌ ๋ช…๋ น ์ž์ฒด๊ฐ€ ์‚ฌ๋ผ์ง

๋“ฑ ์•„์ฃผ ๋งŽ์€ ๋ฌธ์ œ๋“ค์ด ๋ฐœ์ƒํ•œ๋‹ค. ๊ทธ๋ž˜์„œ venv๋ฅผ ์‚ฌ์šฉํ•ด ์‹œ์Šคํ…œ ํŒŒ์ด์ฌ์€ ์ตœ์†Œํ•œ์œผ๋กœ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค.

(4) python ๋ช…๋ น์„ ํ”„๋กœ์ ํŠธ๋ณ„๋กœ ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

venv๋ฅผ ์ผœ์ง€ ์•Š๊ณ  python -m ~~ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด โ€œzsh: command not found: pythonโ€์ด๋ผ๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค. ์—ฌ๊ธฐ์„œ venv๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ํ”„๋กœ์ ํŠธ ๋‚ด๋ถ€์˜ ํŒŒ์ด์ฌ์ด ์‹คํ–‰๋˜์–ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, venv๋Š” python ๋ช…๋ น ์ž์ฒด๋ฅผ ํ”„๋กœ์ ํŠธ ์ „์šฉ์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์—ญํ• ๋„ ํ•œ๋‹ค.

3. venv๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋‚˜?

.venv/ (ํ˜น์€ .env/, .envs/)๋ผ๋Š” ํด๋”๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ์ด ์•ˆ์—

  • bin/python (ํŒŒ์ด์ฌ ์‹คํ–‰ํŒŒ์ผ)
  • lib/python3.11/site-packages/ (ํŒจํ‚ค์ง€ ์„ค์น˜ ๋””๋ ‰ํ† ๋ฆฌ)
  • pip, pytest ๋“ฑ CLI ๋„๊ตฌ

๊ฐ€ ๋“ค์–ด์žˆ๋‹ค. ํ™œ์„ฑํ™”๋ฅผ ํ•˜๋ฉด PATH์˜ ์ตœ์šฐ์„  ์ˆœ์œ„๋ฅผ .venv/bin์œผ๋กœ ๊ต์ฒดํ•˜๊ฒŒ ๋œ๋‹ค. ์ฆ‰ ์šฐ๋ฆฌ๊ฐ€ ์ž…๋ ฅํ•˜๋Š” ๋ชจ๋“  python/pip ๋ช…๋ น์ด ๊ฐ€์ƒํ™˜๊ฒฝ ๋‚ด๋ถ€ ๋ช…๋ น์œผ๋กœ ๋Œ€์ฒด๋œ๋‹ค.

4. venv, pyenv๋Š” ๋‹ค๋ฅด๋‹ค.

  • pyenv: ํŒŒ์ด์ฌ ๋ฒ„์ „ ๊ด€๋ฆฌ์ž
  • venv: ํ”„๋กœ์ ํŠธ๋ณ„ ํŒจํ‚ค์ง€ ๊ฒฉ๋ฆฌ ํ™˜๊ฒฝ

์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ด ๋‘ ๊ฐœ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉ์ค‘.

๊ฒฐ๋ก 

venv๋Š”

  • ํŒจํ‚ค์ง€ ์ถฉ๋Œ ๋ฐฉ์ง€
  • ์‹œ์Šคํ…œ ํŒŒ์ด์ฌ ๋ณดํ˜ธ
  • ํŒ€ ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ ํ†ต์ผ
  • python/pip ๋ช…๋ น ํ”„๋กœ์ ํŠธ ์ „์šฉ ๊ด€๋ฆฌ
  • ์žฌํ˜„์„ฑ, ์•ˆ์ •์„ฑ ํ–ฅ์ƒ

ํŠนํžˆ ์˜์กด์„ฑ์ด ๋งŽ์€ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋ฌด์กฐ๊ฑด ์žˆ์–ด์•ผ ํ•œ๋‹ค!!!