Curieux.JY
  • Post
  • Note
  • Jung Yeon Lee

On this page

  • 1. ๋น„๊ต ์ •๋ฆฌ
    • ๋น„๊ตํ‘œ
    • ์žฅ๋‹จ์  ์ƒ์„ธ
  • 2. Migration
    • ์กฐํ•ฉ๋ณ„ ๋‹จ๊ณ„ ๊ฐ€์ด๋“œ
  • 3. ์ •๋ฆฌ ๋ฐ ์ถ”์ฒœ
  • 4. Conda ํ™˜๊ฒฝ ์˜ฎ๊ธฐ๊ธฐ
    • โœ… ๊ธฐ๋ณธ ์ ˆ์ฐจ
      • 1. ์›๋ณธ ํ™˜๊ฒฝ ํ™œ์„ฑํ™”
      • 2. ํŒจํ‚ค์ง€ ๋ฆฌ์ŠคํŠธ ๋ฐ ํ™˜๊ฒฝ ์ •๋ณด ๋‚ด๋ณด๋‚ด๊ธฐ
      • 3. ์ƒˆ ํ™˜๊ฒฝ ์ƒ์„ฑ
      • 4. ๋™์ž‘ ํ…Œ์ŠคํŠธ
      • 5. (์„ ํƒ) ์›๋ณธ ํ™˜๊ฒฝ ์ •๋ฆฌ
    • โš ๏ธ ์ž์ฃผ ๋งˆ์ฃผ์น˜๋Š” ๋ฌธ์ œ ๋ฐ ํ•ด๊ฒฐ ํŒ
    • ๐Ÿ”ง ์‹ฌํ™” ์˜ต์…˜: ๋ณต์‚ฌ/ํด๋ก  ๋ฐฉ์‹
    • โœ… ์ฒดํฌ๋ฆฌ์ŠคํŠธ: ๋ณต์žกํ•œ Conda ํ™˜๊ฒฝ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์šฉ
    • ๐Ÿ›  ์‚ฌ์šฉ ํŒ

๐Ÿ‘ฉโ€๐Ÿ’ปPython ํ™˜๊ฒฝ์„ค์ • ํŒ

python
env
code
conda vs. uv vs. mamba vs. venv
Published

October 27, 2025

ํŒŒ์ด์ฌ ํ™˜๊ฒฝ ์…‹ํŒ…์„ ๋„์™€์ฃผ๋Š” venv, conda, mamba, uv ๋„ค ๊ฐ€์ง€ Python ๊ฐ€์ƒํ™˜๊ฒฝ/ํŒจํ‚ค์ง€๊ด€๋ฆฌ ๋ฐฉ์‹์— ๋Œ€ํ•ด ๋น„๊ต ์ •๋ฆฌ ๋ฐ ์žฅ๋‹จ์ ์„ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ด์–ด์„œ ์ด๋“ค ๊ฐ„ ์„œ๋กœ ์ „ํ™˜(Migration)ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์กฐํ•ฉ(์ด 4ร—3 = 12๊ฐ€์ง€ ๋ฐฉํ–ฅ ์ค‘ ํ˜„์‹ค์ ์œผ๋กœ ์˜๋ฏธ ์žˆ๋Š” 6๊ฐ€์ง€ ์ด์ƒ) ๊ฐ๊ฐ์— ๋Œ€ํ•ด ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ๋ฅผ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.

1. ๋น„๊ต ์ •๋ฆฌ

๋น„๊ตํ‘œ

๋ฐฉ์‹ ์ฃผ์š” ๊ธฐ๋Šฅ/์ง€์› ๋ฒ”์œ„ ๊ฐ•์  ์•ฝ์ 
venv Python ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ธฐ๋ฐ˜ ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ (python3 -m venv โ€ฆ), ์ฃผ๋กœ ์ˆœ์ˆ˜ Python ํŒจํ‚ค์ง€ ์ค‘์‹ฌ ์„ค์น˜๊ฐ€ ๊ฐ„๋‹จํ•˜๊ณ  ๋ณ„๋„ ๋„๊ตฌ ์—†๊ฑฐ๋‚˜ ์ ์Œ. ๊ฐ€๋ณ๊ณ  ๋น ๋ฆ„ ๋ฐ”์ด๋„ˆ๋ฆฌ(C/C++ ํ™•์žฅ), OS-๋ ˆ๋ฒจ ์˜์กด์„ฑ, ์—ฌ๋Ÿฌ ์–ธ์–ด ํ˜ผํ•ฉ ํ™˜๊ฒฝ์— ํ•œ๊ณ„
conda Anaconda/Miniconda ์ฒด๊ณ„, ๊ฐ€์ƒํ™˜๊ฒฝ + ํŒจํ‚ค์ง€๊ด€๋ฆฌ + ๋‹ค์–‘ํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ/์–ธ์–ด/OS ์˜์กด์„ฑ ์„ค์น˜ ๊ฐ€๋Šฅ ๋‹ค์–‘ํ•œ ์–ธ์–ด/๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง€์›, ๊ณผํ•™/๋จธ์‹ ๋Ÿฌ๋‹ ์Šคํƒ์— ๊ฐ•์  ํ™˜๊ฒฝ ์ƒ์„ฑ/ํŒจํ‚ค์ง€ ์„ค์น˜๊ฐ€ ๋А๋ฆด ์ˆ˜ ์žˆ๊ณ  ๋ณต์žก์„ฑ ์žˆ์Œ
mamba conda์™€ ๊ฑฐ์˜ ๋ช…๋ น์–ด ํ˜ธํ™˜๋˜๋Š”, ์†๋„ ๋ฐ ์˜์กด์„ฑ ํ•ด๊ฒฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๊ฐœ์„ ๋œ ๋„๊ตฌ (โ€œdrop-in replacementโ€) conda ๋Œ€๋น„ ๋น ๋ฅธ ์„ค์น˜/ํ•ด๊ฒฐ, ๋™์ผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ง„์ž… ์žฅ๋ฒฝ ๋‚ฎ์Œ ๋น„๊ต์  ์ตœ์‹  ๋„๊ตฌ๋ผ ์ผ๋ถ€ ์ƒํƒœ๊ณ„/๋ฒ„๊ทธ ์ธก๋ฉด์—์„œ ์™„์ „ํžˆ ๊ฒ€์ฆ๋œ ์ƒํƒœ๋Š” ์•„๋‹˜
uv Astralโ€‘sh๊ฐ€ ๊ฐœ๋ฐœํ•œ Rust ๊ธฐ๋ฐ˜ Python ํ”„๋กœ์ ํŠธ/ํŒจํ‚ค์ง€๊ด€๋ฆฌ ๋„๊ตฌ. ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ, Python ๋ฒ„์ „ ๊ด€๋ฆฌ, ํŒจํ‚ค์ง€ ์„ค์น˜ ๋ฐ ์‹คํ–‰๊นŒ์ง€ ํ†ตํ•ฉ๋จ. ๋งค์šฐ ๋น ๋ฅธ ์˜์กด์„ฑ ํ•ด๊ฒฐ + Python ๋ฒ„์ „ ์„ค์น˜ ์ง€์› + ํ”„๋กœ์ ํŠธ ๋‹จ์œ„ ์›Œํฌํ”Œ๋กœ์šฐ์— ์ ํ•ฉ ์•„์ง ์ผ๋ถ€ ์ƒํƒœ๊ณ„(๋ณต์žกํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ/OS ์˜์กด)์—์„œ๋Š” ์ œ์•ฝ์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ณ , ๊ธฐ์กด ์›Œํฌํ”Œ๋กœ์šฐ์™€ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋น„์šฉ ์žˆ์Œ

์žฅ๋‹จ์  ์ƒ์„ธ

venv

์žฅ์ 

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

๋‹จ์ 

  • ๋ฐ”์ด๋„ˆ๋ฆฌ(C/C++), OS-๋ ˆ๋ฒจ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, GPU/์ฟ ๋‹ค ๋“ฑ ๋ณต์žกํ•œ ์˜์กด์„ฑ์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ ์ˆ˜๋™ ์„ค์น˜๊ฐ€ ๋งŽ๊ณ  ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ์„ฑ ๋†’์Œ.
  • ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์—์„œ ๋‹ค์–‘ํ•œ Python ๋ฒ„์ „์„ ์“ฐ๊ฑฐ๋‚˜ ๊ณต์œ /๋ณต์ œ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๋ ค๋ฉด ๋ณ„๋„ ๋„๊ตฌ(pyenv ๋“ฑ)๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Œ.
  • ํŒจํ‚ค์ง€ ์žฌํ˜„์„ฑ(lockfile-๊ธฐ๋ฐ˜) ๋˜๋Š” ๋Œ€ํ˜• ์Šคํƒ ๊ด€๋ฆฌ์—๋Š” ๊ธฐ๋Šฅ์ด ์ œํ•œ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

conda

์žฅ์ 

  • Python๋ฟ ์•„๋‹ˆ๋ผ R, C/C++, ๊ธฐํƒ€ ์–ธ์–ด ๋ฐ OS-๋ฐ”์ด๋„ˆ๋ฆฌ ์˜์กด์„ฑ์„ ํฌํ•จํ•œ ํ™˜๊ฒฝ ์„ค์ •์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ์‚ฌ์ด์–ธ์Šค/๋จธ์‹ ๋Ÿฌ๋‹ ์ƒํƒœ๊ณ„์—์„œ ํญ๋„“๊ฒŒ ์“ฐ์ด๋ฉฐ ํŒจํ‚ค์ง€ ์ƒํƒœ๊ณ„/๋ฌธ์„œ/์ง€์›์ด ํ’๋ถ€ํ•ฉ๋‹ˆ๋‹ค.
  • ํ™˜๊ฒฝ ๊ฒฉ๋ฆฌ ๋ฐ ๋ณต์ œ(reproducibility)๋ฅผ ์œ„ํ•œ environment.yml ๋“ฑ ๋ฐฉ์‹์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์ 

  • ํ™˜๊ฒฝ ์ƒ์„ฑ ๋ฐ ํŒจํ‚ค์ง€ ์„ค์น˜ ์‹œ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์˜์กด์„ฑ ํ•ด๊ฒฐ์ด ๋ณต์žกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ €์žฅ์†Œ(channel) ์„ค์ •, ์ถฉ๋Œ ๋Œ€์‘, ํ™˜๊ฒฝ๊ด€๋ฆฌ ๋“ฑ์˜ ์ถ”๊ฐ€ ํ•™์Šต์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ€๋ฒผ์šด ํ”„๋กœ์ ํŠธ๋‚˜ ์ˆœ์ˆ˜ Python๋งŒ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋„๊ตฌ๊ฐ€ ๊ณผํ•  ์ˆ˜ ์žˆ๊ณ , ๋””์Šคํฌ/๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

mamba

์žฅ์ 

  • conda ๋ช…๋ น์–ด ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ฑฐ์˜ ๋™์ผํ•˜๋ฏ€๋กœ ๊ธฐ์กด conda ์‚ฌ์šฉ์ž์—๊ฒŒ ์ง„์ž… ์žฅ๋ฒฝ์ด ๋‚ฎ์Šต๋‹ˆ๋‹ค.
  • ํŠนํžˆ ์˜์กด์„ฑ ํ•ด๊ฒฐ ๋ฐ ํŒจํ‚ค์ง€ ์„ค์น˜ ์†๋„ ๋ฉด์—์„œ ์œ ๋ฆฌํ•˜๋‹ค๋Š” ์—ฌ๋Ÿฌ ๋ณด๊ณ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ 

  • ๋น„๊ต์  ์‹ ์ƒ ๋„๊ตฌ์ด๋ฏ€๋กœ conda ๋Œ€๋น„ ์ƒํƒœ๊ณ„ ์ง€์›์ด๋‚˜ ์•ˆ์ •์„ฑ ์ธก๋ฉด์—์„œ ์•„์ง ์™„์„ฑ๋„๊ฐ€ ๋‚ฎ๋‹ค๋Š” ์˜๊ฒฌ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ผ๋ถ€ ์กฐ์ง/CI/CD ํ™˜๊ฒฝ์—์„œ๋Š” conda๋งŒ ๊ณต์‹ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์–ด ์ „ํ™˜ ์‹œ ๊ณ ๋ ค์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

uv

์žฅ์ 

  • ๋งค์šฐ ์ตœ์‹  ๋„๊ตฌ๋กœ, โ€œ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ + Python ๋ฒ„์ „ ์„ค์น˜ + ํŒจํ‚ค์ง€/์˜์กด์„ฑ ๊ด€๋ฆฌโ€๋ฅผ ํ•˜๋‚˜์˜ ์›Œํฌํ”Œ๋กœ์šฐ๋กœ ํ†ตํ•ฉํ•œ๋‹ค๋Š” ๋น„์ „์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜์กด์„ฑ ํ•ด๊ฒฐ ์†๋„๊ฐ€ ๋น ๋ฅด๋ฉฐ, ํ”„๋กœ์ ํŠธ ๋‹จ์œ„๋กœ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ(lockfile ๊ธฐ๋ฐ˜ ๋“ฑ) ๊ตฌ์„ฑ์— ์œ ๋ฆฌํ•˜๋‹ค๋Š” ํ‰๊ฐ€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ 

  • ๋ณต์žกํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ/OS ์ˆ˜์ค€์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, GPU ์Šคํƒ ๋“ฑ์—์„œ๋Š” ์•„์ง conda ๋Œ€๋น„ ์ œ์•ฝ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ์กด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ uv๋กœ ๋ฐ”๊พธ๋ ค๋ฉด ํ•™์Šต/๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋น„์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ณ , ์ผ๋ถ€ ๋„๊ตฌ์™€์˜ ํ†ตํ•ฉ์ด ์•„์ง ๋ฏธ์„ฑ์ˆ™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. Migration

๋‹ค์Œ์œผ๋กœ ๋„ค ๊ฐ€์ง€ ๋ฐฉ์‹ ๊ฐ„์— ๊ฐ€๋Šฅํ•œ ์ „ํ™˜ ์กฐํ•ฉ์„ ๋ชจ๋‘ ๊ณ ๋ คํ•ด, ์ฃผ์š” ์˜๋ฏธ ์žˆ๋Š” ์กฐํ•ฉ์— ๋Œ€ํ•ด ๋‹จ๊ณ„๋ณ„๋กœ ์–ด๋–ป๊ฒŒ ์ด์ „ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฐ€์ด๋“œ๋ฅผ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ „ํ™˜ ๊ฐ€๋Šฅํ•œ ์ฃผ์š” ์กฐํ•ฉ(์ด 12๊ฐ€์ง€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‚˜, ์œ ์˜๋ฏธํ•œ 8๊ฐ€์ง€ ์ •๋„๋ฅผ ์šฐ์„  ์ œ์‹œ):

  • conda โ†’ uv
  • conda โ†’ venv
  • venv โ†’ conda
  • venv โ†’ uv
  • uv โ†’ conda
  • uv โ†’ venv
  • conda โ†’ mamba
  • mamba โ†’ conda
  • mamba โ†’ uv
  • venv โ†’ mamba
  • uv โ†’ mamba

์กฐํ•ฉ๋ณ„ ๋‹จ๊ณ„ ๊ฐ€์ด๋“œ

A) conda โ†’ uv

  1. conda ํ™˜๊ฒฝ ํ™œ์„ฑํ™”:

    conda activate my_env
  2. Python ๋ฒ„์ „ ํ™•์ธ ๋ฐ ํŒจํ‚ค์ง€ ๋ฆฌ์ŠคํŠธ ์ถ”์ถœ:

    python --version
    conda list --export > conda_env_export.txt
    pip freeze > requirements_conda.txt
  3. uv ์„ค์น˜ (์‹œ์Šคํ…œ์— ์—†์œผ๋ฉด):

    curl -LsSf https://astral.sh/uv/install.sh | sh
    ``` :contentReference[oaicite:15]{index=15}
  4. ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ ๋ฐ ์ดˆ๊ธฐํ™”:

    cd project_folder
    uv init
  5. ์›ํ•˜๋Š” Python ๋ฒ„์ „ ์„ค์น˜ ํ˜น์€ ์‚ฌ์šฉ:

    uv python install 3.x   # ํ•„์š”ํ•œ ๋ฒ„์ „
    ``` :contentReference[oaicite:16]{index=16}
  6. uv๋กœ ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ:

    uv venv --python 3.x
  7. ํŒจํ‚ค์ง€ ์„ค์น˜:

    uv pip install -r requirements_conda.txt
  8. lockfile ์ƒ์„ฑ ๋ฐ ๋™๊ธฐํ™”:

    uv lock
    uv sync
  9. ์‹คํ–‰/ํ…Œ์ŠคํŠธ:

    uv run python your_script.py
  10. (์„ ํƒ) ๊ธฐ์กด conda ํ™˜๊ฒฝ ์ •๋ฆฌ:

    conda deactivate
    conda env remove -n my_env

B) conda โ†’ venv

  1. conda ํ™˜๊ฒฝ ํ™œ์„ฑํ™”:

    conda activate my_env
  2. ํŒจํ‚ค์ง€ ๋ฆฌ์ŠคํŠธ ๋ฐ Python ๋ฒ„์ „ ํ™•์ธ:

    python --version
    pip freeze > requirements_conda.txt
  3. ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™:

    cd project_folder
  4. venv ์ƒ์„ฑ:

    python3 -m venv .venv
  5. venv ํ™œ์„ฑํ™”:

    source .venv/bin/activate   # (Linux/macOS)
    # or .venv\Scripts\activate  # (Windows)
  6. ํŒจํ‚ค์ง€ ์„ค์น˜:

    pip install -r requirements_conda.txt
  7. ํ…Œ์ŠคํŠธ ์‹คํ–‰:

    python your_script.py
  8. (์„ ํƒ) conda ํ™˜๊ฒฝ ์ œ๊ฑฐ:

    conda deactivate
    conda env remove -n my_env

C) venv โ†’ conda

  1. venv ํ™œ์„ฑํ™”:

    source .venv/bin/activate
  2. Python ๋ฒ„์ „ ๋ฐ ํŒจํ‚ค์ง€ ๋ฆฌ์ŠคํŠธ ์ €์žฅ:

    python --version
    pip freeze > requirements_venv.txt
  3. conda ์„ค์น˜/์ค€๋น„ (์ด๋ฏธ ์„ค์น˜๋ผ ์žˆ๋‹ค๋ฉด ์ƒ๋žต)

  4. ์ƒˆ conda ํ™˜๊ฒฝ ์ƒ์„ฑ:

    conda create -n new_env python=3.x
    conda activate new_env
  5. ๊ฐ€๋Šฅํ•˜๋ฉด conda ํŒจํ‚ค์ง€ ์„ค์น˜, ์ดํ›„ pip ์„ค์น˜:

    conda install --yes --file requirements_venv.txt   # ๊ฐ€๋Šฅํ•  ๊ฒฝ์šฐ
    # ์•„๋‹ˆ๋ฉด
    pip install -r requirements_venv.txt
  6. ํ…Œ์ŠคํŠธ:

    python your_script.py
  7. (์„ ํƒ) venv ์ œ๊ฑฐ:

    deactivate
    rm -rf .venv

D) venv โ†’ uv

  1. venv ํ™œ์„ฑํ™”:

    source .venv/bin/activate
  2. ํŒจํ‚ค์ง€ ๋ฆฌ์ŠคํŠธ ์ €์žฅ:

    pip freeze > requirements_venv.txt
    python --version
  3. uv ์„ค์น˜ (์‹œ์Šคํ…œ์— ์—†์œผ๋ฉด):

    curl -LsSf https://astral.sh/uv/install.sh | sh
  4. ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ / ์ดˆ๊ธฐํ™”:

    cd project_folder
    uv init
  5. Python ๋ฒ„์ „ ์„ค์น˜/์‚ฌ์šฉ:

    uv python install 3.x
  6. ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ:

    uv venv --python 3.x
  7. ํŒจํ‚ค์ง€ ์„ค์น˜:

    uv pip install -r requirements_venv.txt
  8. lockfile ์ƒ์„ฑ ๋ฐ ๋™๊ธฐํ™”:

    uv lock
    uv sync
  9. ํ…Œ์ŠคํŠธ ์‹คํ–‰:

    uv run python your_script.py
  10. (์„ ํƒ) ๊ธฐ์กด venv ์ œ๊ฑฐ:

    rm -rf .venv

E) uv โ†’ conda

  1. uv ํ™˜๊ฒฝ์—์„œ Python ๋ฒ„์ „ ๋ฐ ํŒจํ‚ค์ง€ ๋ฆฌ์ŠคํŠธ ์ถ”์ถœ:

    uv run python --version
    uv pip freeze > requirements_uv.txt
  2. conda ์„ค์น˜/์ค€๋น„

  3. ์ƒˆ๋กœ์šด conda ํ™˜๊ฒฝ ์ƒ์„ฑ:

    conda create -n new_env python=3.x
    conda activate new_env
  4. ํŒจํ‚ค์ง€ ์„ค์น˜:

    conda install --yes --file requirements_uv.txt  # ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด
    # ๋˜๋Š”
    pip install -r requirements_uv.txt
  5. ํ…Œ์ŠคํŠธ:

    python your_script.py
  6. (์„ ํƒ) uv ํ™˜๊ฒฝ ๊ด€๋ จ ํŒŒ์ผ ์ •๋ฆฌ (.venv, uv.lock ๋“ฑ)

F) uv โ†’ venv

  1. uv ํ™˜๊ฒฝ์—์„œ ํŒจํ‚ค์ง€ ๋ฆฌ์ŠคํŠธ ์ถ”์ถœ:

    uv pip freeze > requirements_uv.txt
    python --version
  2. ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™:

    cd project_folder
  3. venv ์ƒ์„ฑ:

    python3 -m venv .venv
  4. venv ํ™œ์„ฑํ™”:

    source .venv/bin/activate
  5. ํŒจํ‚ค์ง€ ์„ค์น˜:

    pip install -r requirements_uv.txt
  6. ํ…Œ์ŠคํŠธ ์‹คํ–‰:

    python your_script.py
  7. (์„ ํƒ) uv ํ™˜๊ฒฝ ์ œ๊ฑฐ/์ •๋ฆฌ

G) conda โ†’ mamba

  1. ์‹œ์Šคํ…œ์— mamba ์„ค์น˜:

    conda install mamba -n base -c conda-forge
  2. ๊ธฐ์กด conda ๋ช…๋ น์–ด ๋Œ€๋ถ€๋ถ„์„ mamba๋กœ ๋ฐ”๊พธ์–ด ์‹คํ–‰ ๊ฐ€๋Šฅ:

    mamba create -n env2 python=3.x
    mamba install numpy scipy
  3. ํ…Œ์ŠคํŠธ:

    conda activate env2  # or mamba activate env2
    python your_script.py
  4. (์„ ํƒ) ๊ธฐ์กด conda ๋ช…๋ น์–ด ์“ฐ๋˜ ์Šต๊ด€์„ mamba๋กœ ๊ต์ฒด

H) mamba โ†’ conda

  1. conda ์„ค์น˜/์ค€๋น„ (์ด๋ฏธ ๋Œ€๋ถ€๋ถ„ ์„ค์น˜๋˜์–ด ์žˆ์Œ)

  2. mamba ํ™˜๊ฒฝ์—์„œ ํŒจํ‚ค์ง€ ๋ฆฌ์ŠคํŠธ ์ถ”์ถœ:

    conda activate env_mamba
    pip freeze > requirements_mamba.txt
  3. ์ƒˆ conda ํ™˜๊ฒฝ ์ƒ์„ฑ:

    conda create -n new_env python=3.x
    conda activate new_env
  4. ํŒจํ‚ค์ง€ ์„ค์น˜:

    conda install --yes --file requirements_mamba.txt
    # ๋˜๋Š”
    pip install -r requirements_mamba.txt
  5. ํ…Œ์ŠคํŠธ ์‹คํ–‰:

    python your_script.py

I) mamba โ†’ uv

  1. mamba ํ™˜๊ฒฝ ํ™œ์„ฑํ™” ๋ฐ ๋ฆฌ์ŠคํŠธ ์ถ”์ถœ:

    conda activate env_mamba  # since mamba uses conda env
    pip freeze > requirements_mamba.txt
    python --version
  2. uv ์„ค์น˜

  3. ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐํ™” (uv init)

  4. Python ๋ฒ„์ „ ์„ค์น˜ (uv python install 3.x)

  5. uv venv ์ƒ์„ฑ (uv venv --python 3.x)

  6. uv pip install from requirements file (uv pip install -r requirements_mamba.txt)

  7. uv lock + sync

  8. ์‹คํ–‰ ํ…Œ์ŠคํŠธ (uv run python your_script.py)

J) venv โ†’ mamba

  1. venv ํ™œ์„ฑํ™”

    source .venv/bin/activate
    pip freeze > requirements_venv.txt
    python --version
  2. conda+mamba ์„ค์น˜/์ค€๋น„

  3. ์ƒˆ mamba ํ™˜๊ฒฝ ์ƒ์„ฑ:

    mamba create -n env_mamba python=3.x
    mamba activate env_mamba
  4. ํŒจํ‚ค์ง€ ์„ค์น˜:

    mamba install --yes --file requirements_venv.txt
    # ๋˜๋Š”
    pip install -r requirements_venv.txt
  5. ํ…Œ์ŠคํŠธ ์‹คํ–‰:

    python your_script.py

K) uv โ†’ mamba

  1. uv ํ™˜๊ฒฝ์—์„œ ๋ฆฌ์ŠคํŠธ ์ถ”์ถœ:

    uv pip freeze > requirements_uv.txt
    python --version
  2. conda/mamba ์„ค์น˜

  3. ์ƒˆ mamba ํ™˜๊ฒฝ ์ƒ์„ฑ:

    mamba create -n env2 python=3.x
    mamba activate env2
  4. ํŒจํ‚ค์ง€ ์„ค์น˜:

    mamba install --yes --file requirements_uv.txt
    # ๋˜๋Š”
    pip install -r requirements_uv.txt
  5. ํ…Œ์ŠคํŠธ ์‹คํ–‰:

    python your_script.py

3. ์ •๋ฆฌ ๋ฐ ์ถ”์ฒœ

  • ๊ฐ„๋‹จํ•˜๊ณ  ์ˆœ์ˆ˜ Python ํŒจํ‚ค์ง€ ์ค‘์‹ฌ์ด๋ผ๋ฉด venv ๋ฐฉ์‹์ด ์ตœ์†Œํ•œ์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋กœ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณต์žกํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ/๋ฐ”์ด๋„ˆ๋ฆฌ/๊ณผํ•™/๋จธ์‹ ๋Ÿฌ๋‹ ์Šคํƒ์ด ๋งŽ๋‹ค๋ฉด conda ๋˜๋Š” mamba ๋ฐฉ์‹์ด ์•ˆ์ •์ ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ์„ค์น˜/์˜์กด์„ฑ ํ•ด๊ฒฐ ์†๋„๊ฐ€ ์ค‘์š”ํ•˜๋‹ค๋ฉด mamba๊ฐ€ ์ข‹์€ ์„ ํƒ์ž…๋‹ˆ๋‹ค.
  • ์ตœ์‹  ์›Œํฌํ”Œ๋กœ์šฐ, Python ๋ฒ„์ „ ๊ด€๋ฆฌ, ํ”„๋กœ์ ํŠธ ๋‹จ์œ„ ์žฌํ˜„์„ฑ(lockfile)์ง€์›์ด ์ค‘์š”ํ•˜๊ณ , ๋ฐ”์ด๋„ˆ๋ฆฌ/OS ์˜์กด์„ฑ์ด ๋œํ•˜๋‹ค๋ฉด uv๊ฐ€ ๋งค๋ ฅ์ ์ธ ์„ ํƒ์ž…๋‹ˆ๋‹ค.
  • ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜โ€‰(ํ™˜๊ฒฝ์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ)๋ฅผ ๊ณ ๋ คํ•  ๋•Œ๋Š” โ€œ์™„์ „ํžˆ ๋™์ผํ•œ ํ™˜๊ฒฝ์„ ๋ณต์ œํ•œ๋‹คโ€๋ณด๋‹ค๋Š” โ€œ์œ ์‚ฌํ•˜๊ฒŒ ์žฌ๊ตฌ์„ฑํ•œ๋‹คโ€๋Š” ๊ด€์ ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ํ˜„์‹ค์ ์ž…๋‹ˆ๋‹ค.

4. Conda ํ™˜๊ฒฝ ์˜ฎ๊ธฐ๊ธฐ

Conda ํ™˜๊ฒฝ์„ ์ตœ๋Œ€ํ•œ ๊ทธ๋Œ€๋กœ ๋ณต์ œ(์ด๋™/๋ฐฑ์—…/์žฌ์ƒ)ํ•˜๋Š” ์ถ”์ฒœ ์ ˆ์ฐจ๋ฅผ ์•„๋ž˜์— ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„์ „์ด๋‚˜ ๋กœ์ปฌ ๊ฒฝ๋กœ(p-prefix) ๋“ฑ์ด ๊ผฌ์—ฌ์„œ ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฏ€๋กœ, ์ฃผ์˜์‚ฌํ•ญ๊ณผ ์šฐํšŒ ๋ฐฉ๋ฒ•๊นŒ์ง€ ํ•จ๊ป˜ ํฌํ•จํ•˜์˜€์Šต๋‹ˆ๋‹ค.

โœ… ๊ธฐ๋ณธ ์ ˆ์ฐจ

1. ์›๋ณธ ํ™˜๊ฒฝ ํ™œ์„ฑํ™”

conda activate my_env

2. ํŒจํ‚ค์ง€ ๋ฆฌ์ŠคํŠธ ๋ฐ ํ™˜๊ฒฝ ์ •๋ณด ๋‚ด๋ณด๋‚ด๊ธฐ

# OS ๋…๋ฆฝ์„ฑ์„ ๋†’์ด๋ ค๋ฉด ๋นŒ๋“œ ์ •๋ณด ์ƒ๋žต
conda env export --no-builds > environment.yml
# (์„ ํƒ) pip๋กœ ์„ค์น˜๋œ ํŒจํ‚ค์ง€๊ฐ€ ์žˆ๋‹ค๋ฉด
pip freeze > pip_requirements.txt

์ฃผ์˜: environment.yml ๋‚ด์— prefix: ํ•ญ๋ชฉ(์˜ˆ: ๋กœ์ปฌ ๊ฒฝ๋กœ)์ด ํฌํ•จ๋˜์–ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฒฝ๋กœ/๋‹ค๋ฅธ ๋จธ์‹ ์— ๋ณต์ œํ•  ๋•Œ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋ฏ€๋กœ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

3. ์ƒˆ ํ™˜๊ฒฝ ์ƒ์„ฑ

conda env create -n new_env -f environment.yml

๋˜๋Š”

conda create -n new_env python=3.x
conda activate new_env
# ์ดํ›„ pip_requirements.txt๊ฐ€ ์žˆ๋‹ค๋ฉด
pip install -r pip_requirements.txt

4. ๋™์ž‘ ํ…Œ์ŠคํŠธ

conda activate new_env
python -c "import ํ•„์š”ํ•œ_๋ชจ๋“ˆ; print(๋ชจ๋“ˆ.__version__)"

ํ”„๋กœ์ ํŠธ๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

5. (์„ ํƒ) ์›๋ณธ ํ™˜๊ฒฝ ์ •๋ฆฌ

conda deactivate
conda env remove -n my_env

โš ๏ธ ์ž์ฃผ ๋งˆ์ฃผ์น˜๋Š” ๋ฌธ์ œ ๋ฐ ํ•ด๊ฒฐ ํŒ

  1. prefix ๊ฒฝ๋กœ ๋ฌธ์ œ
    • environment.yml ์•ˆ์— ์›๋ณธ ํ™˜๊ฒฝ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ prefix:๋กœ ์ €์žฅ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ, ๋‹ค๋ฅธ ๋จธ์‹  ๋˜๋Š” ๋‹ค๋ฅธ ์œ„์น˜์—์„œ ๊ทธ๋Œ€๋กœ ๋งŒ๋“ค๋ฉด ์ถฉ๋Œํ•˜๊ฑฐ๋‚˜ ๋ฌด์‹œ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ([Stack Overflow][1])
    • โžค ํ•ด๊ฒฐ: grep -v "^prefix:" environment.yml > clean_env.yml ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ œ๊ฑฐ ํ›„ ์‚ฌ์šฉ.
  2. ๋นŒ๋“œ ๋ฒˆํ˜ธ/ํ”Œ๋žซํผ ์˜์กด์„ฑ ๋ฌธ์ œ
    • ๋นŒ๋“œ ๋ฒˆํ˜ธ(=py38_0 ๋“ฑ)๋‚˜ OS/์•„ํ‚คํ…์ฒ˜ ํŠน์œ  ํŒจํ‚ค์ง€๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด, ๋‹ค๋ฅธ ์‹œ์Šคํ…œ(์˜ˆ: Windows โ†”๏ธŽ Linux)์—์„œ ์„ค์น˜ ์‹คํŒจ๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค.
    • โžค ํ•ด๊ฒฐ: --no-builds ์˜ต์…˜์œผ๋กœ ๋นŒ๋“œ์ •๋ณด ์ƒ๋žต, ๋˜๋Š” ์ˆ˜๋™์œผ๋กœ ํ•ด๋‹น ํŒจํ‚ค์ง€ ๋ฒ„์ „์„ ๋‹จ์ˆœํ™”.
  3. pip ์„ค์น˜๋œ ํŒจํ‚ค์ง€ ํฌํ•จ ๋ˆ„๋ฝ/๋ฒ„์ „ ๋ฌธ์ œ
    • conda env export๋งŒ์œผ๋กœ๋Š” pip๋กœ ์„ค์น˜๋œ ํŒจํ‚ค์ง€๊ฐ€ ์ œ๋Œ€๋กœ ํฌํ•จ๋˜์ง€ ์•Š๊ฑฐ๋‚˜, ์ด๋ฆ„์ด ๋‹ฌ๋ผ์„œ ์žฌ์„ค์น˜ ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
    • โžค ํ•ด๊ฒฐ: pip freeze๋กœ ๋”ฐ๋กœ ๋คํ”„ํ•ด๋‘๊ณ , ์ƒ์„ฑ๋œ ํ™˜๊ฒฝ์—์„œ pip install -r pip_requirements.txt๋ฅผ ์ˆ˜ํ–‰.
  4. ๋กœ์ปฌ/์ปค์Šคํ…€ ํŒจํ‚ค์ง€ ๋˜๋Š” ๋น„-๊ณต์‹ ์ฑ„๋„ ์‚ฌ์šฉ
    • ์–ด๋–ค ํŒจํ‚ค์ง€๋Š” ๊ณต์‹ conda ์ฑ„๋„์ด ์—†๊ณ  ๋กœ์ปฌ ๋นŒ๋“œํ•˜๊ฑฐ๋‚˜ ์ปค์Šคํ…€ ์ฑ„๋„(๊ธฐ์—… ๋‚ด๋ถ€ ์ฑ„๋„)์„ ์‚ฌ์šฉํ–ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ƒˆ ํ™˜๊ฒฝ์—์„œ ๋™์ผํ•˜๊ฒŒ ์„ค์น˜๋˜์ง€ ์•Š์œผ๋ฉด ์žฌํ˜„์ด ๊นจ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • โžค ํ•ด๊ฒฐ: environment.yml ์•ˆ์˜ channels: ํ•ญ๋ชฉ์„ ํ™•์ธํ•˜๊ณ , ํ•„์š”ํ•œ ์ถ”๊ฐ€ ์ฑ„๋„์„ ๋ช…์‹œํ•˜๊ฑฐ๋‚˜ ์ˆ˜๋™์œผ๋กœ ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  5. OS๋‚˜ ์•„ํ‚คํ…์ฒ˜ ๋ณ€๊ฒฝ ์‹œ ๋ฌธ์ œ
    • ๊ฐ™์€ ํ™˜๊ฒฝ์ด๋ผ ํ•ด๋„ ์›๋ณธ์ด Windows์ด๊ณ  ๋Œ€์ƒ์ด Linux์ด๋ฉด ์•„์˜ˆ ์„ค์น˜ ๋ถˆ๊ฐ€๋Šฅํ•œ ํŒจํ‚ค์ง€๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • โžค ํ•ด๊ฒฐ: ํ”Œ๋žซํผ์„ ๋™์ผํ•˜๊ฒŒ ๋งž์ถ”๊ฑฐ๋‚˜, OS-ํŠน์ • ํŒจํ‚ค์ง€๋Š” ์ˆ˜๋™์œผ๋กœ ์กฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”ง ์‹ฌํ™” ์˜ต์…˜: ๋ณต์‚ฌ/ํด๋ก  ๋ฐฉ์‹

  • ๋‹จ์ˆœํžˆ ๋ณต์ œํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์•„๋ž˜ ๋ฐฉ๋ฒ•๋„ ์žˆ์Šต๋‹ˆ๋‹ค:

    conda create --name new_env --clone my_env

    ์ด ๋ช…๋ น์€ ๊ฐ™์€ ์‹œ์Šคํ…œ ์•ˆ์—์„œ ํ™˜๊ฒฝ์„ ๊ฑฐ์˜ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ์ด ๋ฐฉ์‹๋„ ๋กœ์ปฌ ๊ฒฝ๋กœ(prefix)๋‚˜ ์‹œ์Šคํ…œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•˜๋ฏ€๋กœ ์ด๋™์ด๋‚˜ ๋‹ค๋ฅธ ๋จธ์‹ ์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋„คํŠธ์›Œํฌ ์—†๊ฑฐ๋‚˜ ํŒจํ‚ค์ง€ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ์–ด๋ ค์šด ๊ฒฝ์šฐ์—๋Š” condaโ€‘pack ์„ ์ด์šฉํ•ด์„œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ํ™˜๊ฒฝ์„ ๋ฌถ์–ด ์˜ฎ๊ธฐ๋Š” ๋ฐฉ๋ฒ•๋„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด ๋ฐฉ๋ฒ•์€ ๋Œ€์ƒ ๋จธ์‹ ์˜ OS/์•„ํ‚คํ…์ฒ˜๊ฐ€ ๋™์ผํ•ด์•ผ ์•ˆ์ •์ ์ž…๋‹ˆ๋‹ค.


์•„๋ž˜๋Š” Conda ํ™˜๊ฒฝ์„ ์ตœ๋Œ€ํ•œ ๊ทธ๋Œ€๋กœ ์˜ฎ๊ธฐ๊ฑฐ๋‚˜ ์žฌํ˜„ํ•  ๋•Œ, ํŠนํžˆ ๋กœ์ปฌ ๊ฒฝ๋กœ, ์ฑ„๋„ ์„ค์ •, pip ํ˜ผํ•ฉ ์„ค์น˜ ๋“ฑ ๋ณต์žกํ•œ ์กฐ๊ฑด์ด ์žˆ๋Š” ๊ฒฝ์šฐ์— ๊ผญ ์ฒดํฌํ•ด์•ผ ํ•  ํ•ญ๋ชฉ๋“ค๋กœ ๋งŒ๋“  ์ฒดํฌ๋ฆฌ์ŠคํŠธ์ž…๋‹ˆ๋‹ค. ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ „-ํ›„์— ์ด ํ•ญ๋ชฉ๋“ค์„ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•˜๋ฉด โ€œ๋ฒ„์ „ ์ถฉ๋Œโ€โ€œ์„ค์น˜ ์‹คํŒจโ€โ€œํ™˜๊ฒฝ ๊นจ์งโ€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… ์ฒดํฌ๋ฆฌ์ŠคํŠธ: ๋ณต์žกํ•œ Conda ํ™˜๊ฒฝ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์šฉ

๋‹ค์Œ์€ ํ•ญ๋ชฉ๋ณ„๋กœ ์„ค๋ช… + ์ฒดํฌ ์‚ฌํ•ญ์„ ์ •๋ฆฌํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

No. ํ•ญ๋ชฉ ์„ค๋ช… ์ฒดํฌํ•ด์•ผ ํ•  ๊ฒƒ
1 ํ™˜๊ฒฝ ํŒŒ์ผ ๋‚ด prefix: ๊ฒฝ๋กœ ํ™•์ธ conda env export ๋ช…๋ น์œผ๋กœ ์ƒ์„ฑ๋œ environment.yml ์•ˆ์— prefix: ํ•ญ๋ชฉ์ด ๋“ค์–ด ์žˆ์œผ๋ฉด, ๋Œ€์ƒ ์‹œ์Šคํ…œ/๊ฒฝ๋กœ๊ฐ€ ๋‹ค๋ฅผ ๊ฒฝ์šฐ ์„ค์น˜ ์‹œ ๊ฒฝ๋กœ ์ถฉ๋Œ์ด ์ƒ๊น๋‹ˆ๋‹ค. โ€ƒ โ€ข environment.yml ์—ด์–ด๋ณด๊ณ  prefix: ํ•ญ๋ชฉ์ด ์žˆ๋Š”์ง€ ํ™•์ธ
โ€ƒ โ€ข ์žˆ๋‹ค๋ฉด ๋Œ€์ƒ ๊ฒฝ๋กœ์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œ
2 ์ฑ„๋„(channels:) ์„ค์ • ํŠน์ • ์ฑ„๋„(ex: conda-forge, custom local channel)์—์„œ ํŒจํ‚ค์ง€๋ฅผ ๋ฐ›์•„์™”์œผ๋ฉด, ์ƒˆ ํ™˜๊ฒฝ์—์„œ๋„ ๋™์ผ ์ฑ„๋„์ด ์žˆ์–ด์•ผ ๋™์ผ ๋ฒ„์ „ ์„ค์น˜ ๊ฐ€๋Šฅ. ์ผ๋ถ€ ๋กœ์ปฌ ์ฑ„๋„/ํŒŒ์ผ ๊ฒฝ๋กœ ์ฑ„๋„์€ URL ํ˜•ํƒœ๋‚˜ ๋กœ์ปฌ ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ์ž˜๋ชป๋˜๋ฉด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ([GitHub][1]) โ€ƒ โ€ข channels: ๋ฆฌ์ŠคํŠธ ํ™•์ธ (์˜ˆ: - conda-forge, - defaults, - file:///โ€ฆ)
โ€ƒ โ€ข ๋กœ์ปฌ ์ฑ„๋„ ์‚ฌ์šฉ ์‹œ ํ•ด๋‹น ํŒŒ์ผ๊ฒฝ๋กœ/URL์ด ๋Œ€์ƒ ๋จธ์‹ ์—์„œ๋„ ์œ ํšจํ•œ์ง€ ํ™•์ธ
โ€ƒ โ€ข conda config --show channels๋กœ ์ „์—ญ ์„ค์ •๋„ ๊ฒ€ํ† 
3 ํŒจํ‚ค์ง€ ๋นŒ๋“œ๋ฒˆํ˜ธ ๋ฐ ํ”Œ๋žซํผ ์˜์กด์„ฑ environment.yml์— ํŒจํ‚ค์ง€๋“ค์ด numpy=1.23.4=py39hโ€ฆ_0์ฒ˜๋Ÿผ ๋นŒ๋“œ๋ฒˆํ˜ธ ํฌํ•จ๋  ์ˆ˜ ์žˆ๊ณ , OS/์•„ํ‚คํ…์ฒ˜๊ฐ€ ๋ฐ”๋€Œ๋ฉด ๋™์ผ ๋นŒ๋“œ๊ฐ€ ์—†์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โ€ƒ โ€ข --no-builds ์˜ต์…˜์œผ๋กœ exportํ•ด๋ณด๋Š” ๊ฒƒ ๊ณ ๋ ค
โ€ƒ โ€ข Windows โ†”๏ธŽ Linux ๋“ฑ ํ”Œ๋žซํผ์ด ๋ฐ”๋€Œ๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฒ„์ „๋งŒ ์ง€์ •ํ•˜๊ณ  ๋นŒ๋“œ๋ฒˆํ˜ธ ์ œ๊ฑฐ
4 pip ์„ค์น˜๋œ ํŒจํ‚ค์ง€ ํ˜ผํ•ฉ ์—ฌ๋ถ€ Conda ํ™˜๊ฒฝ์— pip install โ€ฆ๋กœ ์„ค์น˜๋œ ํŒจํ‚ค์ง€๊ฐ€ ์„ž์—ฌ ์žˆ์œผ๋ฉด, conda env export๋งŒ์œผ๋กœ ์™„์ „ํ•˜๊ฒŒ ๋ณต์ œ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ณ , pip + conda ์ถฉ๋Œ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ([docs.conda.io][2]) โ€ƒ โ€ข pip freeze ์ถœ๋ ฅ๋„ ํ•จ๊ป˜ ์ €์žฅ (pip_requirements.txt)
โ€ƒ โ€ข environment.yml ๋‚ด dependencies: ์•„๋ž˜ - pip: ๋ธ”๋ก์ด ์žˆ๋Š”์ง€ ํ™•์ธ
โ€ƒ โ€ข ์ƒˆ ํ™˜๊ฒฝ ์ƒ์„ฑ ์‹œ: ๋จผ์ € conda ํŒจํ‚ค์ง€ ์„ค์น˜ โ†’ ๊ทธ ๋‹ค์Œ์— pip ์„ค์น˜ ์ˆœ์„œ ์œ ์ง€
5 ๋กœ์ปฌ์„ค์น˜๋œ ํŒจํ‚ค์ง€(์˜ˆ: ~/.local/lib/pythonX.Y) ๋˜๋Š” ์‚ฌ์šฉ์ž site-packages ๋ˆ„์  ์—ฌ๋ถ€ ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์Šคํ…œ ์ˆ˜์ค€ ๋˜๋Š” ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ ์ˆ˜์ค€์—์„œ ์„ค์น˜ํ•œ ํŒจํ‚ค์ง€๊ฐ€ env ๋‚ด๋ถ€์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹œ ๋ˆ„๋ฝ๋˜๊ฑฐ๋‚˜ ์ถฉ๋Œ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ([docs.icer.msu.edu][3]) โ€ƒ โ€ข PYTHONPATH / PYTHONHOME ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋ผ ์žˆ๋Š”์ง€ ํ™•์ธ ([docs.conda.io][4])
โ€ƒ โ€ข ~/.local/lib/pythonX.Y ๋“ฑ์— ์„ค์น˜๋œ ํŒจํ‚ค์ง€๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
โ€ƒ โ€ข ํ™˜๊ฒฝ ๊นจ์ง ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์‚ฌ์šฉ์ž ์„ค์น˜ ๊ฒฝ๋กœ ๋ฐฑ์—… ๋˜๋Š” ์ œ๊ฑฐ ๊ณ ๋ ค
6 ํ™˜๊ฒฝ ๋ณ€์ˆ˜(environment variables) ์„ค์ • ์—ฌ๋ถ€ Conda ํ™˜๊ฒฝ์— ํŠน์ • ํ™˜๊ฒฝ๋ณ€์ˆ˜(VAR=โ€ฆ)๋ฅผ ์„ค์ •ํ•ด ๋†“์•˜์œผ๋ฉด, ์ƒˆ ํ™˜๊ฒฝ์—์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์„ค์ •ํ•ด์•ผ ๋™์ผ ๋™์ž‘ ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค. ([docs.conda.io][2]) โ€ƒ โ€ข conda env config vars list -n my_env ๋˜๋Š” conda env export ๋‚ด variables: ๋ธ”๋ก ํ™•์ธ
โ€ƒ โ€ข ์ƒˆ environment.yml์— variables: ์„น์…˜์„ ํฌํ•จํ•˜๋Š”์ง€ ํ™•์ธ
7 ๊ฒฝ๋กœ ๋ฐ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ(dependencies referencing local path) ํ”„๋กœ์ ํŠธ ๋‚ด๋ถ€์—์„œ ๋กœ์ปฌ ๊ฒฝ๋กœ๋กœ ์ฐธ์กฐํ•˜๋Š” ํŒจํ‚ค์ง€(์˜ˆ: - /home/user/project/mypkg ํ˜•ํƒœ)๋‚˜ Git submodule ๋“ฑ์ด ์žˆ์„ ๊ฒฝ์šฐ, ๋Œ€์ƒ ๋จธ์‹ ์—์„œ ๊ฒฝ๋กœ๊ฐ€ ๋‹ฌ๋ผ์ง€๋ฉด ์„ค์น˜/์ฐธ์กฐ๊ฐ€ ๊นจ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โ€ƒ โ€ข environment.yml ๋˜๋Š” requirements-pip.txt์— ๋กœ์ปฌ ๊ฒฝ๋กœ ์„ค์น˜๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์ƒ‰
โ€ƒ โ€ข Git submodule ๋˜๋Š” pip install -e ../local/package ์‹ ์„ค์น˜๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
โ€ƒ โ€ข ๋Œ€์ƒ ์‹œ์Šคํ…œ ๊ฒฝ๋กœ๋ฅผ ๋งž์ถ”๊ฑฐ๋‚˜ relative path๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธ
8 OS/์•„ํ‚คํ…์ฒ˜(Windows vs Linux vs macOS) ํ˜ธํ™˜์„ฑ ์›๋ณธ ํ™˜๊ฒฝ์ด ํŠน์ • OS/์•„ํ‚คํ…์ฒ˜์—์„œ ๋งŒ๋“ค์–ด์กŒ๋‹ค๋ฉด, ๋‹ค๋ฅธ OS/์•„ํ‚คํ…์ฒ˜์—์„œ ๋™์ผํ•œ ํŒจํ‚ค์ง€ ๋ฒ„์ „์ด ์—†๊ฑฐ๋‚˜ ๋นŒ๋“œ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โ€ƒ โ€ข conda info ๋ฐ conda list์—์„œ ํ”Œ๋žซํผ ์ •๋ณด๋ฅผ ํ™•์ธ
โ€ƒ โ€ข ๋Œ€์ƒ ๋จธ์‹  ํ”Œ๋žซํผ์ด ๋™์ผํ•œ์ง€ ํ™•์ธ
โ€ƒ โ€ข ํ”Œ๋žซํผ์ด ๋‹ค๋ฅด๋ฉด ์ผ๋ถ€ ํŒจํ‚ค ๋ฒ„์ „์„ ์กฐ์ •ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐ ๊ณ ๋ ค
9 ์ฑ„๋„ ์šฐ์„ ์ˆœ์œ„ ๋ฐ strict priority ์„ค์ • ์ฑ„๋„ ์šฐ์„ ์ˆœ์œ„(channel_priority)๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋™์ผ ๋ฒ„์ „ ํŒจํ‚ค์ง€๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋นŒ๋“œ๊ฐ€ ์„ค์น˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ([Ohio Supercomputer Center][5]) โ€ƒ โ€ข conda config --show channel_priority ๊ฐ’ ํ™•์ธ (์˜ˆ: strict vs flexible)
โ€ƒ โ€ข environment.yml ์ƒ์„ฑ ์‹œ ๋™์ผ ์„ค์ • ๋ฐ˜์˜ (ํ•„์š”์‹œ conda config --set channel_priority strict)
10 ํŒจํ‚ค์ง€ ์บ์‹œ ๋ฐ ๊นจ์ง„ ๋งํฌ ์—ฌ๋ถ€ ํŒจํ‚ค์ง€ ์บ์‹œ๋‚˜ ํ•˜๋“œ ๋งํฌ ๋ฌธ์ œ๋กœ ํ™˜๊ฒฝ์ด ๊นจ์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ([docs.conda.io][4]) โ€ƒ โ€ข ์‹คํ–‰ ์ค‘ ImportError ๋˜๋Š” โ€œํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋์ง€๋งŒ import ์•ˆ ๋จโ€ ์˜ค๋ฅ˜ ์žˆ๋Š”์ง€ ํ™•์ธ
โ€ƒ โ€ข conda install -f <package> ๋กœ ๊ฐ•์ œ ์žฌ์„ค์น˜ ๊ฒ€ํ† 
โ€ƒ โ€ข ์ƒˆ ํ™˜๊ฒฝ ์ƒ์„ฑ ์ „์— ์บ์‹œ ์ •๋ฆฌ(conda clean --all) ๊ณ ๋ ค

๐Ÿ›  ์‚ฌ์šฉ ํŒ

  • ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์œ„ ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฌธ์„œํ™”ํ•ด๋‘๊ณ , ์›๋ณธ ํ™˜๊ฒฝ์—์„œ ์ฒดํฌํ•œ ์ƒํƒœ, ๋Œ€์ƒ ํ™˜๊ฒฝ์—์„œ ์ฒดํฌํ•œ ์ƒํƒœ๋ฅผ ๊ธฐ๋กํ•ด๋‘๋ฉด ์ดํ›„ ์ถ”์ ์ด ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.
  • environment.yml ์ƒ์„ฑ ์‹œ --no-builds ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ”Œ๋žซํผ/๋นŒ๋“œ๋ฒˆํ˜ธ ์ถฉ๋Œ์„ ์ค„์ด๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
  • ์ƒˆ ํ™˜๊ฒฝ ์ƒ์„ฑ ํ›„ ๋ฐ”๋กœ ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ ์‹คํ–‰ ์ „์— ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค์–ด import ์ฃผ์š”_๋ชจ๋“ˆ; print(๋ชจ๋“ˆ.__version__) ์‹์œผ๋กœ ํ™•์ธํ•˜๋ฉด ์ด์ƒ ์—ฌ๋ถ€๋ฅผ ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŠนํžˆ ์ฑ„๋„์ด๋‚˜ ๋กœ์ปฌ ํŒจํ‚ค์ง€ ์ฐธ์กฐ๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ, โ€œ๋จผ์ € conda ํŒจํ‚ค์ง€ ์„ค์น˜โ€ โ†’ โ€œ๊ทธ๋‹ค์Œ pip ์„ค์น˜/๋กœ์ปฌ ์„ค์น˜โ€ ์ˆœ์„œ๋ฅผ ์ง€ํ‚ค๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ([docs.conda.io][2])
  • ๊ธฐ๋กํ•ด๋‘๊ธฐ: ์–ด๋–ค ๋กœ์ปฌ ํŒจํ‚ค์ง€๋ฅผ ์ฐธ์กฐํ–ˆ๋Š”์ง€, ์–ด๋–ค ์ฑ„๋„์„ ์ผ๋Š”์ง€, ์–ด๋–ค ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ–ˆ๋Š”์ง€ ๋“ฑ์„ ๋ฉ”๋ชจํ•ด๋‘๋ฉด โ€œ์™œ ์žฌํ˜„์ด ์•ˆ ๋˜์ง€?โ€ ์ƒํƒœ์—์„œ ํ•ด๋‹ต์„ ์ฐพ๊ธฐ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

Reference

  • โ€œConda and Mamba - UC Berkeley Statisticsโ€
  • โ€œHow could using Mamba instead of Conda as package manager for โ€ฆโ€
  • โ€œuv - Astral Docsโ€
  • โ€œManaging Scientific Python environments using Conda, Mamba and โ€ฆโ€
  • โ€œEnvironments: Conda, Mamba, and all that โ€” OCESE Documentationโ€
  • โ€œMamba vs Conda: Know the Differences and Similaritiesโ€
  • โ€œuv: Python packaging in Rust - Astralโ€
  • โ€œPSA: If youโ€™re starting a new project, try astral/uv! : r/Python - Redditโ€
  • โ€œ[Help Request] Python development, specifically with uv from astral โ€ฆโ€
  • โ€œAnaconda export Environment file - python - Stack Overflowโ€
  • โ€œExport your conda envs โ€“from-history - Monica Thieu, PhDโ€
  • โ€œHow to export and import a conda environment without errorsโ€
  • โ€œHow can you "clone" a conda environment into the base (root โ€ฆโ€
  • โ€œMoving Conda Environments - Anacondaโ€

Copyright 2024, Jung Yeon Lee