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

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป Programming/programming

[๊ฐ€์ƒํ™˜๊ฒฝ] ๊ฐ€์ƒํ™˜๊ฒฝ์ด๋ž€ & ์•„๋‚˜์ฝ˜๋‹ค ์‹ค์Šต๊ณผ ๋ช…๋ น์–ด ๋ชจ์Œ๐Ÿ 

๊ฐ€์ƒํ™˜๊ฒฝ(Virtual Environments)์ด ๋ญ์˜ˆ์š”โ“

๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€์ƒ ํ™˜๊ฒฝ์ด ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” "ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ"์ž…๋‹ˆ๋‹ค.

์‰ฝ๊ฒŒ ๋งํ•ด์„œ ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋งŒ ๋‹ด์•„์„œ ๋งŒ๋“  ๋ฐ”๊ตฌ๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค!๐Ÿงบ๐Ÿงบ๐Ÿงบ

์•„์ง๊นŒ์ง€๋Š” ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ๊ฐ€์‹ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ๊ฐ€์ƒํ™˜๊ฒฝ์˜ ํ•„์š”์„ฑ์„ ์ฝ์–ด๋ด…์‹œ๋‹ค!

 


๊ฐ€์ƒํ™˜๊ฒฝ์˜ ํ•„์š”์„ฑ

Python์„ ํฌํ•จํ•˜์—ฌ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋“ค์€ ํŒจํ‚ค์ง€(๋˜๋Š” ๋ชจ๋“ˆ)์˜ ๋ฒ„์ „์„ ๊ณ„์†ํ•ด์„œ ์ตœ์‹ ํ™”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„์ „๋งˆ๋‹ค ์ผ๋ถ€ ๊ธฐ๋Šฅ๋“ค์€ ์—†์–ด์ง€๊ฑฐ๋‚˜ ์ƒˆ๋กœ ์ƒ๊น๋‹ˆ๋‹ค. ์ง€๊ธˆ ์ €์—๊ฒŒ ํ•„์š”ํ•œ ํŠน์ • ๊ธฐ๋Šฅ์ด ์ตœ์‹  ๋ฒ„์ „์—๋Š” ์—†์„ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์‹  ๋ฒ„์ „์ด ๋ฌด์กฐ๊ฑด ์ข‹์€ ๊ฒƒ์€ ์•„๋‹ˆ๊ฒ ์ฃ ? :) ํ•˜์ง€๋งŒ ํ•˜๋‚˜์˜ ํ™˜๊ฒฝ์—๋Š” ํŒจํ‚ค์ง€๋‹น ํ•˜๋‚˜์˜ ๋ฒ„์ „๋งŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(์—ฌ๋Ÿฌ ๋ฒ„์ „์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด ์•„์˜ˆ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ๊ตฌ์ถ•ํ•˜๊ธฐ๋„ ์–ด๋ ต๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ๋„ ์–ด๋ ต๋‹ค๊ณ  ํ•ด์š”!)

์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ €ํฌ๊ฐ€ ์ง„ํ–‰ํ•˜๋Š” ํฐ ํ”„๋กœ์ ํŠธ๋Š” ์ž‘๊ฒŒ ๋‚˜๋ˆ„๋ฉด ํ”„๋กœ์ ํŠธ A, B, C๋กœ ๋‚˜๋ˆ„์–ด๋ณผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ• ๊ฒŒ์š”.

ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด ๋‹ค๋ฅด๋‹ค๊ณ  ํ•ด๋ณผ๊ฒŒ์š”! ์—ฌ๊ธฐ์„œ๋Š” ํ•„์š”ํ•œ ํŒŒ์ด์ฌ ๋ฒ„์ „์ด ๋‹ค๋ฅด๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ด…์‹œ๋‹ค. 

 

 

ํ•˜๋‚˜์˜ ํ™˜๊ฒฝ์— ์„œ๋กœ ๋‹ค๋ฅธ ํŒŒ์ด์ฌ์„ ์„ค์น˜ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ ์š” ๊ฐ€์ƒํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค! ์•„๋ž˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ A, B, C ํ”„๋กœ์ ํŠธ์— ๊ฐ€์ƒํ™˜๊ฒฝ์„ ๋งŒ๋“ค์–ด ๊ฐ๊ฐ ํ•„์š”ํ•œ ํŒŒ์ด์ฌ ๋ฒ„์ „์„ ์„ค์น˜ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐธ ํŽธํ•˜์ฃ  ์š” ๋…€์„?! :)

 

์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ํŒŒ์ด์ฌ์œผ๋กœ๋งŒ ์„ค๋ช…์„ ๋“œ๋ ธ๋Š”๋ฐ, ๊ฐ€์ƒํ™˜๊ฒฝ๋งˆ๋‹ค ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋“ค๋„ ๊ฐ์ž์˜ ๋ฒ„์ „์œผ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ •๋ง ํŽธํ•˜์ฃ !

โžก๏ธ ๊ฒฐ๋ก ์ ์œผ๋กœ๋Š” ๊ฐ€์ƒํ™˜๊ฒฝ์€ ์ž‘์—…์„ ๋ฐ”๊ฟ€ ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ฒ„์ „์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ถˆํŽธํ•จ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒฉ๋ฆฌ๋œ ๋…๋ฆฝ์ ์ธ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค!

 


๊ฐ€์ƒํ™˜๊ฒฝ์˜ ์ข…๋ฅ˜

๊ฐ€์ƒํ™˜๊ฒฝ์˜ ์ข…๋ฅ˜๋Š” ๋งค์šฐ ๋‹ค์–‘ํ•œ๋ฐ, ์˜ค๋Š˜ ์ €๋Š” ์•„๋‚˜์ฝ˜๋‹ค๋กœ ์‹ค์Šต์„ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

์•„๋ž˜์˜ ์˜ˆ์‹œ ๋ง๊ณ ๋„ ์žฅ๊ณ , ์…€๋ ˆ๋‹ˆ์›€ ๋“ฑ ๋‹ค์–‘ํ•ด์š”(์–ผ๋ฅธ ๋‹ค๋ฅธ ํ™˜๊ฒฝ๋“ค๋„ ์‚ฌ์šฉํ•ด ๋ณด๊ณ  ์‹ถ์–ด์š”)

๋‹ค๋ฅธ ๋…€์„๋“ค๋„ ๋‹ค์Œ ํฌ์ŠคํŒ…์— ๊ฐ€์ง€๊ณ  ์˜ฌ๊ป˜์š”! ๋ฐ”๋กœ ํ•„์š”ํ•˜์‹  ๋ถ„์€ ํฌ์ŠคํŠธ ๋งˆ์ง€๋ง‰์— REFERENCE๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š” :)

  • venv : Python 3.3 ๋ฒ„์ „ ์ดํ›„๋ถ€ํ„ฐ ๊ธฐ๋ณธ ๋ชจ๋“ˆ์— ํฌํ•จ๋จ
  • virtualenv : Python 2 ๋ฒ„์ „๋ถ€ํ„ฐ ์‚ฌ์šฉํ•ด์˜ค๋˜ ๊ฐ€์ƒํ™˜๊ฒฝ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, Python 3์—์„œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • conda : Anaconda Python์„ ์„ค์น˜ํ–ˆ์„ ์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“ˆ
  • pyenv : pyenv์˜ ๊ฒฝ์šฐ Python Version Manger์ž„๊ณผ ๋™์‹œ์— ๊ฐ€์ƒํ™˜๊ฒฝ ๊ธฐ๋Šฅ์„ ํ”Œ๋Ÿฌ๊ทธ์ธ ํ˜•ํƒœ๋กœ ์ œ๊ณต

์•„๋‚˜์ฝ˜๋‹ค ๊ฐ€์ƒํ™˜๊ฒฝ ๊ตฌ์ถ• ์‹ค์Šต

1. ์•„๋‚˜์ฝ˜๋‹ค ์„ค์น˜

https://www.anaconda.com/products/individual

 

Anaconda | Individual Edition

Anaconda's open-source Individual Edition is the easiest way to perform Python/R data science and machine learning on a single machine.

www.anaconda.com

 

2. ์•„๋‚˜์ฝ˜๋‹ค๊ฐ€ ์ œ๋Œ€๋กœ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ

ํ„ฐ๋ฏธ๋„์— ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”!

conda --version

 

3. ํ˜„์žฌ ์„ค์น˜๋˜์–ด ์žˆ๋Š” ๊ฐ€์ƒํ™˜๊ฒฝ ํ™•์ธ

conda env list

์ฒ˜์Œ ์„ค์น˜๋ฅผ ํ•˜์‹œ๋ฉด ๊ธฐ๋ณธ ํ™˜๊ฒฝ์ธ base ๋ฐ–์— ์—†์ง€๋งŒ, ์ €๋Š” ์ด๋ฏธ ์„ค์น˜๋ฅผ ํ•œ ์ƒํƒœ์—ฌ์„œ ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ๊ฐ€์ƒํ™˜๊ฒฝ์˜ ์ด๋ฆ„๊ณผ ์œ„์น˜์— ๋Œ€ํ•œ ๋ชฉ๋ก์ด ํ™•์ธ๋ฉ๋‹ˆ๋‹ค :)

 

4. ์ƒˆ๋กœ์šด ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ

conda create --name '{๊ฐ€์ƒํ™˜๊ฒฝ ์ด๋ฆ„}' python={๋ฒ„์ „}

'test' ๋ถ€๋ถ„์— ์›ํ•˜๋Š” ๊ฐ€์ƒํ™˜๊ฒฝ์˜ ์ด๋ฆ„์„ ์ ๊ณ  ์œ„์˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์‹œ๋ฉด ์ง„ํ–‰ํ•˜๊ฒ ๋ƒ๋Š” ๋ฌผ์Œ๊ณผ ์ž…๋ ฅ์ฐฝ์ด ๋œน๋‹ˆ๋‹ค. ์ด๋•Œ y(yes)๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์‹œ๋ฉด ์ •์ƒ์ ์œผ๋กœ ์„ค์น˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค! conda env list๋กœ ๋‹ค์‹œ ํ™•์ธ์„ ํ•ด๋ณด๋ฉด 'test'๋ผ๋Š” ๊ฐ€์ƒํ™˜๊ฒฝ์ด ์ƒ์„ฑ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

 

proceed? y!
env list ํ™•์ธ

5. ๊ฐ€์ƒํ™˜๊ฒฝ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

conda activate {๊ฐ€์ƒํ™˜๊ฒฝ ์ด๋ฆ„}

ํ•ด๋‹น ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ์›ํ•˜๋Š” ๊ฐ€์ƒํ™˜๊ฒฝ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ํ•ด๋‹น ๊ฐ€์ƒํ™˜๊ฒฝ์— '๋“ค์–ด๊ฐ„๋‹ค'๋ผ๋Š” ๋Š๋‚Œ์œผ๋กœ ์ดํ•ดํ•˜๊ณ  ์žˆ์–ด์š”! ๊ทธ๋Ÿฌ๋ฉด ์•„๋ž˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ ํ„ฐ๋ฏธ๋„์— ํ˜„์žฌ ๋‚ด๊ฐ€ ์–ด๋–ค ๊ฐ€์ƒํ™˜๊ฒฝ์— ๋“ค์–ด์™€์žˆ๋Š”์ง€ (๊ด„ํ˜ธ)๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ฐธ ํŽธํ•˜์ฃ ?

 

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

conda deactivate

 

7. ๊ฐ€์ƒํ™˜๊ฒฝ ์ œ๊ฑฐ

conda env remove --name {๊ฐ€์ƒํ™˜๊ฒฝ ์ด๋ฆ„}

์ œ๊ฑฐ๋Š” ์ƒ์„ฑ์ฒ˜๋Ÿผ ์ง„์งœ ํ•˜๊ฒ ๋ƒ๋Š” ๋ฌผ์Œ๋„ ์—†์ด ์‰ฝ๊ฒŒ ์ œ๊ฑฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ conda env list ๋ช…๋ น์–ด๋กœ ์ œ๊ฑฐ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

 

 

conda remove -n {๊ฐ€์ƒํ™˜๊ฒฝ ์ด๋ฆ„} --all

์œ„ ๋ช…๋ น์–ด์ฒ˜๋Ÿผ --all ์ด๋ผ๋Š” ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ํด๋”๊นŒ์ง€ ๋‹ค ์‚ญ์ œ๋ฅผ ํ•ด์ค๋‹ˆ๋‹ค!

GUI๋กœ ํ™•์ธํ•ด ๋ณด๋ฉด ์•„๋ž˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ ๊ฐ€์ƒํ™˜๊ฒฝ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. test๋ผ๋Š” ํด๋”๊ฐ€ ์‚ฌ๋ผ์กŒ์ฃ ?

 

์•„๋‚˜์ฝ˜๋‹ค ๋””๋ ‰ํ† ๋ฆฌ
 env ๋””๋ ‰ํ† ๋ฆฌ

 


๐Ÿฏ์ฃผ์˜์‚ฌํ•ญ ๋ฐ ๊ฟ€ํŒ๐Ÿ

conda์˜ ๊ฐ€์ƒํ™˜๊ฒฝ์€ ์ค‘์ฒฉ๋ผ์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ค‘์ฒฉ๋ผ์„œ ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ์˜ ์žฅ์ ๋„ ์žˆ์ง€๋งŒ, ์ง€๊ธˆ์€ ๋ฏธ์ฒ˜ ์ƒ๊ฐ์ง€๋„ ๋ชปํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์ƒํ™˜๊ฒฝ์„ ์‹คํ–‰ํ•  ๋•Œ๋Š” base๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์–ด๋–ค ๊ฐ€์ƒํ™˜๊ฒฝ๋„ ์‹คํ–‰๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊นจ๋—ํ•œ ํ™˜๊ฒฝ์—์„œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค!

๋ณดํ†ต ํ„ฐ๋ฏธ๋„์„ ๋‹ค์‹œ ์ผค ๋•Œ๋งˆ๋‹ค base ๊ฐ€์ƒ ํ™˜๊ฒฝ์ด ๋””ํดํŠธ๋กœ ์‹คํ–‰์ด ๋˜์–ด์žˆ๋Š”๋ฐ, ๊นจ๋—ํ•œ ํ™˜๊ฒฝ์„ ์œ„ํ•ด์„œ ์ข…๋ฃŒ๋ฅผ ๋งค๋ฒˆ ํ•ด์ฃผ์–ด์•ผ ํ•ด์š”. 'conda deactivate'๋กœ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹œ์ž‘ํ•  ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ํ•˜๋ฉด ๋„ˆ๋ฌด ๊ท€์ฐฎ๊ฒ ์ฃ ?
์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ„ฐ๋ฏธ๋„์— ์ž…๋ ฅํ•ด๋‘๋ฉด ์•ž์œผ๋กœ base๊ฐ€ ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜์ง€ ์•Š๊ฒŒ ์„ธํŒ…ํ•ด ์ค๋‹ˆ๋‹ค! ์ •๋ง ํŽธํ•ด์š”๐Ÿ
์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

conda config --set auto_activate_base false

์ถ”๊ฐ€๋กœ conda๋Š” ๋งค์šฐ ์นœ์ ˆํ•ด์š”! ์•„๋ž˜ ์ฒ˜๋Ÿผ ์ œ๊ฐ€ ์˜คํƒ€๋ฅผ ๋‚ด๋ฉด "๋„ˆ๊ฐ€ ์›ํ•˜๋Š”๊ฒŒ ์ด๊ฒŒ ํ˜น์‹œ ์ด๊ฑฐ์•ผ?" ๋ผ๊ณ  ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

์Šค์œ—ํ•œ ์ฝ˜๋‹ค์”จ,, ๐Ÿ˜ณ

 

 


๐Ÿ  ์ฝ˜๋‹ค ๋ช…๋ น์–ด ๋ชจ์Œ.zip

conda --version  # ์•„๋‚˜์ฝ˜๋‹ค ๋ฒ„์ „ ํ™•์ธ
conda create -n {ํ™˜๊ฒฝ๋ช…} python={๋ฒ„์ „}  # ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ
conda env list # ๊ฐ€์ƒํ™˜๊ฒฝ ๋ฆฌ์ŠคํŠธ ํ™•์ธ
conda remove -n {ํ™˜๊ฒฝ๋ช…} --all  # ๊ฐ€์ƒํ™˜๊ฒฝ ์‚ญ์ œ
activate {ํ™˜๊ฒฝ๋ช…}  # ๊ฐ€์ƒํ™˜๊ฒฝ on
deactivate ๋˜๋Š” conda deactivate  # ๊ฐ€์ƒํ™˜๊ฒฝ off
conda config --set auto_activate_base false  # conda ์ž๋™ํ™œ์„ฑํ™” off (์ž๋™์œผ๋กœ base ์‹คํ–‰x)
conda config --set auto_activate_base True  # conda ์ž๋™ํ™œ์„ฑํ™” on
conda env list > result.txt  # ๊ฐ€์ƒํ™˜๊ฒฝ ๋ฆฌ์ŠคํŠธ๋ฅผ result๋ผ๋Š” txtํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ธฐ

๐Ÿ™ REFERENCE