conda
Conda 24+Conda CLI ๋ช ๋ น์ด ๋น ๋ฅธ ์ฐธ์กฐ โ ํ๊ฒฝ ๊ด๋ฆฌ, ํจํค์ง ์ค์น / ๊ฒ์, ์ฑ๋, lockfile, ์ค์ , ์ ๋ฆฌ โ ์์ฃผ ์ฐ๋ ์ต์ ๊ณผ ์ค์ ์์๊น์ง ํจ๊ป ์ ๋ฆฌํ์ต๋๋ค.
๋ช ๋ น์ด 40๊ฐ
๋์๋ง
conda --versionconda ๋ฒ์ , ๋ฆด๋ฆฌ์ค ๋ ์ง, ์ฌ์ฉ ์ค์ธ Python ์ธํฐํ๋ฆฌํฐ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
conda --versionconda infoํ๋ซํผ, Python ๋ฒ์ , ํ๊ฒฝ ๋๋ ํฐ๋ฆฌ, ์ฑ๋ URL, ์ค์ ๋ ํจํค์ง ์บ์๋ฅผ ํ์ํฉ๋๋ค.
--envs; --json; --all
conda info --envsconda help๋ชจ๋ conda ํ์ ๋ช ๋ น์ ๋์ดํฉ๋๋ค.
conda helpconda help <subcommand>ํ ํ์ ๋ช ๋ น์ ์ ์ฒด ํ๋๊ทธ ๋ชฉ๋ก๊ณผ ์ค๋ช ์ ํ์ํฉ๋๋ค.
conda help install์ ๋ฐ์ดํธ
conda update condaํ์ฌ ์ฑ๋์ ์ต์ ๋ฒ์ ์ผ๋ก conda ์์ฒด๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
-n <env>; --all
conda update condaconda update --allํ์ฌ ํ๊ฒฝ์ ๋ชจ๋ ํจํค์ง๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅํ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.
-n <env>; --no-pin; --strict-channel-priority
conda update --allํ๊ฒฝ
conda create -n <name>`<name>`์ด๋ผ๋ ๋น ์ ํ๊ฒฝ์ ๋ง๋ญ๋๋ค(๊ธฐ๋ณธ Python ๋ฒ์ ์ base ์ธํฐํ๋ฆฌํฐ์์).
python=<ver>; -y ํ๋กฌํํธ์ yes; --clone <env>; --file <env.yml>; -p <path>
conda create -n py-data python=3.12 -yconda create -n <name> python=<ver>ํน์ Python ๋ฒ์ ์ ๊ณ ์ ๋ ํ๊ฒฝ์ ๋ง๋ญ๋๋ค.
conda create -n py311 python=3.11 -yconda env create -f <env.yml>YAML ์ฌ์ ํ์ผ์์ ํ๊ฒฝ์ ๋ง๋ญ๋๋ค โ ํ๊ฒฝ์ ๊ณต์ ํ๋ ๊ฐ์ฅ ์ฌํ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ ๋๋ค.
-n <name>; -p <path>; --prune; --json
conda env create -f environment.ymlconda env update -f <env.yml> --pruneYAML ์ฌ์ ํ์ผ๋ก ๊ธฐ์กด ํ๊ฒฝ์ ์ ๋ฐ์ดํธํฉ๋๋ค. `--prune`์ ๋ ์ด์ ๋์ด๋์ง ์์ ํจํค์ง๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
conda env update -f environment.yml --pruneconda env export > environment.ymlํ์ฌ ํ๊ฒฝ์ YAML ํ์ผ๋ก ๋ด๋ณด๋ ๋๋ค(๊ธฐ๋ณธ์ ์ผ๋ก ๋น๋ ๋ฌธ์์ด ์์ โ ํฌ๋ก์ค ํ๋ซํผ ์ด์์ฑ์ ์ํด `--no-builds` ์ฌ์ฉ).
--no-builds; --from-history; --json; --channel-priority strict
conda env export --from-history > environment.ymlconda activate <name>์ด๋ฆ(๋๋ `conda activate <path>`๋ก ๊ฒฝ๋ก)์ผ๋ก ํ๊ฒฝ์ ํ์ฑํํฉ๋๋ค. Windows์์๋ cmd.exe์์ `activate <name>`์ ์ฌ์ฉํ์ธ์.
<name>; <path>
conda activate py-dataconda deactivateํ์ฌ ํ๊ฒฝ์ ์ข ๋ฃํ๊ณ base๋ก ๋์๊ฐ๋๋ค.
conda deactivateconda env list๋ชจ๋ conda ํ๊ฒฝ์ ์์น์ ํจ๊ป ๋์ดํฉ๋๋ค. ํ์ฌ ํ๊ฒฝ์ `*`๋ก ๊ฐ์กฐ๋ฉ๋๋ค.
-v `~/.conda/envs` ์๋ ๊ฒฝ๋ก; --json
conda env listconda env remove -n <name>ํ๊ฒฝ์ ์์ ํ ์ญ์ ํฉ๋๋ค.
-n <name>; -p <path>; --all; -y
conda env remove -n old-proj -yconda env config vars set VAR=valueํ๊ฒฝ์ด ํ์ฑํ๋ ๋๋ง๋ค ์๋ ์ ์ฉ๋๋ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํฉ๋๋ค.
-n <name>; -p <path>
conda env config vars set -n py-data CUDA_VISIBLE_DEVICES=0conda rename -n <old> <new>ํ๊ฒฝ ์ด๋ฆ์ ๋ณ๊ฒฝํฉ๋๋ค(์ ์ด๋ฆ์ผ๋ก ๋ณต์ ํ๊ณ ์ด์ ์ด๋ฆ ์ ๊ฑฐ).
-n <old> <new>; -p <path> <new_path>; -d dry-run
conda rename -n py-data py-mlํจํค์ง
conda install <pkg>ํ์ฑ(๋๋ `-n`์ผ๋ก ๋ช ๋ช ๋) ํ๊ฒฝ์ ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค.
-n <env>; -p <path>; -c <channel>; -y; --update-deps; --force-reinstall; --no-deps
conda install -n py-data numpy pandasconda install -c conda-forge <pkg>conda-forge ์ปค๋ฎค๋ํฐ ์ฑ๋์์ ์ค์นํฉ๋๋ค(๊ธฐ๋ณธ ์ฑ๋๋ณด๋ค ์นดํ๋ก๊ทธ๊ฐ ๋ ๊ด๋ฒ์ํจ).
conda install -c conda-forge nodejsconda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidiaPyTorch ์ฑ๋์์ GPU ์ง์๊ณผ ํจ๊ป PyTorch๋ฅผ ์ค์นํฉ๋๋ค.
conda install pytorch-cuda=12.1 -c pytorch -c nvidiaconda install --file <requirements.txt>`pip` ํธํ requirements ํ์ผ์ ๋์ด๋ ๋ชจ๋ ํจํค์ง๋ฅผ conda๋ก ์ค์นํฉ๋๋ค.
conda install --file requirements.txtconda search <pkg>์ค์ ๋ ์ฑ๋์์ ํจํค์ง๋ฅผ ๊ฒ์ํฉ๋๋ค โ ๋ฒ์ , ๋น๋ ๋ฌธ์์ด, ์ฑ๋์ ํ์ํฉ๋๋ค.
-c <channel>; --info ํจํค์ง ์ธ๋ถ์ ๋ณด ํ์; --platform; --json
conda search 'numpy>=2.0'conda listํ์ฑ ํ๊ฒฝ์ ์ค์น๋ ๋ชจ๋ ํจํค์ง๋ฅผ ๋น๋ + ์ฑ๋๊ณผ ํจ๊ป ๋์ดํฉ๋๋ค.
-n <env>; -p <path>; --json; --export; --revisions ์ด๋ ฅ ํ์
conda list --export > pkglist.txtconda list --revisions`install / update / remove` ๋์์ ์ด๋ ฅ์ ํ์ํฉ๋๋ค โ `conda install --revision <N>`์ผ๋ก ๋กค๋ฐฑ๊ณผ ํจ๊ป ์ฌ์ฉํ์ธ์.
conda list --revisionsconda install --revision <N>ํ๊ฒฝ์ ๋ฆฌ๋น์ `<N>`์ผ๋ก ๋กค๋ฐฑํฉ๋๋ค(`conda list --revisions` ์ฐธ์กฐ).
conda install --revision 3conda remove <pkg>ํจํค์ง์ ๋ ์ด์ ํ์ํ์ง ์์ ๊ทธ ์์กด์ฑ์ ์ ๊ฑฐํฉ๋๋ค.
-n <env>; -p <path>; -y; --all; --force
conda remove -n py-data scipy -y์ฑ๋
conda config --add channels <ch>`.condarc`์ ์ฑ๋์ ์ถ๊ฐํฉ๋๋ค(๊ธฐ๋ณธ์ ์ผ๋ก ๋ง์ง๋ง์ด ๊ฐ์ฅ ๋์ ์ฐ์ ์์ โ `--prepend`๋ก ๋ค์ง๊ธฐ).
-c <channel>; --prepend; --force
conda config --add channels conda-forge --prependconda config --remove channels <ch>`.condarc`์์ ์ฑ๋์ ์ ๊ฑฐํฉ๋๋ค.
conda config --remove channels conda-forgeconda config --show channelsํ์ฌ ์ฑ๋ ์ฐ์ ์์ ๋ชฉ๋ก์ ์ถ๋ ฅํฉ๋๋ค.
--json; --system; --env
conda config --show channelsconda config --set channel_priority strict|flex|disabled์ฑ๋์ด ์ถฉ๋์ ํด์ํ๋ ๋ฐฉ์์ ์ ์ดํฉ๋๋ค. `strict`(Conda 23๋ถํฐ ๊ธฐ๋ณธ) = ๊ฐ์ฅ ๋์ ์ฐ์ ์์ ์ฑ๋์ด ์์ ํ ์น๋ฆฌ.
conda config --set channel_priority strict์ค์
conda config --show๋ณํฉ๋ ์ค์ ์ ์ถ๋ ฅํฉ๋๋ค: ~/.condarc + ์์คํ + ํ๊ฒฝ ๋ฒ์ + CLI ์ฌ์ ์.
--all; --json; --source; -v
conda config --show | grep -i sslconda config --set <key> <value>์ค์ ํค๋ฅผ ์ค์ ํฉ๋๋ค(`.condarc`์ ์ธ ์ ์๋ ๋ชจ๋ ๊ฒ).
conda config --set auto_activate_base falseconda config --describe <key>์ค์ ํค์ ํ์ฉ๋ ๋ชจ๋ ๊ฐ๊ณผ ๊ธฐ๋ณธ๊ฐ์ ํ์ํฉ๋๋ค.
conda config --describe channel_priorityconda config --write-default๊ธฐ๋ณธ `.condarc`์ ์ฌ์ฉ์ ํ์ ์๋๋ค(ํ์ธ ์์ด ๋ฎ์ด์ฐ๊ธฐ).
conda config --write-default์บ์ / ์ ๋ฆฌ
conda clean --all๋์คํฌ ๊ณต๊ฐ์ ํ๋ณดํ๊ธฐ ์ํด tarball, ์บ์๋ ํจํค์ง, lockfile, ์ธ๋ฑ์ค ์บ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
-y; --packages; --index-cache; --tarballs; --locks; --source-cache
conda clean --all -yconda clean --packages์บ์๋ `.tar.bz2` / `.conda` ์์นด์ด๋ธ๋ฅผ ์ ๊ฑฐํฉ๋๋ค(์๋นํ ๋์คํฌ ๊ณต๊ฐ ์ ์ฝ).
conda clean --packages -yconda clean --index-cache์บ์๋ ์ฑ๋ ์ธ๋ฑ์ค๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ๋ค์ ๋ช ๋ น์์ ์ธ๋ฑ์ค๋ฅผ ๋ค์ ๋ค์ด๋ก๋ํฉ๋๋ค.
conda clean --index-cache -y๋น๋
conda build <recipe>๋ ์ํผ ๋๋ ํฐ๋ฆฌ์์ conda ํจํค์ง๋ฅผ ๋น๋ํฉ๋๋ค(skeleton: conda skeleton pypi <name>).
<recipe>; --no-test; --no-build-id; -c <channel>; --output
conda build recipes/numpy๊ธฐํ
conda run -n <env> <cmd>ํ๊ฒฝ์ ํ์ฑํํ์ง ์๊ณ ํ๊ฒฝ ๋ด์์ ๋ช ๋ น์ ์คํํฉ๋๋ค โ CI ์คํฌ๋ฆฝํธ์ cron ์์ ์์ ์ ์ฉํฉ๋๋ค.
-n <env>; -p <path>; --cwd <dir>
conda run -n py-data pytest -xconda doctorํํ ๋ฌธ์ ๋ฅผ ์ง๋จํฉ๋๋ค: ํ๊ฒฝ ์ํ ๋ถ์ผ์น, ์ฑ๋ ์ฐ์ ์์, ์ ๊ธ ํ์ผ ๋ฑ.
-n <env>; --verbose; --fix-checks
conda doctor๊ด๋ จ ๋ช ๋ น์ด ์นํธ์ํธ
uv
uv CLI ๋น ๋ฅธ ์ฐธ์กฐ โ Python ํ๋ก์ ํธ ์ด๊ธฐํ, ์์กด์ฑ ๊ด๋ฆฌ, ๊ฐ์ ํ๊ฒฝ, lockfile ํด์, ํด ๋ฌ๋, ์์ฒด ์ ๋ฐ์ดํธ โ ์์ฃผ ์ฐ๋ ์ต์ ๊ณผ ์ค์ ์์๊น์ง ํจ๊ป ์ ๋ฆฌํ์ต๋๋ค.
๋ช ๋ น์ด 39๊ฐ
uv 0.4+
pip
pip ํจํค์ง ์ค์น ๋๊ตฌ CLI ๋น ๋ฅธ ์ฐธ์กฐ โ install / uninstall / inspect ํจํค์ง, ๊ฐ์ ํ๊ฒฝ, requirements ํ์ผ, ์ค์ , ์ธ๋ฑ์ค ๊ด๋ฆฌ โ ์์ฃผ ์ฐ๋ ์ต์ ๊ณผ ์ค์ ์์๊น์ง ํจ๊ป ์ ๋ฆฌํ์ต๋๋ค.
๋ช ๋ น์ด 37๊ฐ
pip 24+
pytest
pytest CLI ๋น ๋ฅธ ์ฐธ์กฐ โ ํ ์คํธ ๋์ค์ปค๋ฒ๋ฆฌ, ์ ํ, ํฝ์ค์ฒ, ๋ง์ปค, ๋ณ๋ ฌ ์ฒ๋ฆฌ, parametrize โ ์์ฃผ ์ฐ๋ ์ต์ ๊ณผ ์ค์ ์์๊น์ง ํจ๊ป ์ ๋ฆฌํ์ต๋๋ค.
๋ช ๋ น์ด 34๊ฐ
pytest 8+
์ํ ๋ฐ ์ฌ์ฉ ์๋ด
๋ณธ ๋ช ๋ น์ค ๋๊ตฌ ์นํธ์ํธ ๋ชจ์์ ์คํ ์ปค๋ฎค๋ํฐ ์ฐธ๊ณ ์๋ฃ์ ๋๋ค. ๋ณธ ๋ฌธ์์์ ์ธ๊ธ๋๋ ๋๊ตฌ์ ๋ช ์นญ, ๋ก๊ณ , ์ํ(์: Gitโข, Dockerโข, Kubernetesยฎ, kubectl, PostgreSQLยฎ, MySQLยฎ, Redisโข, MongoDBยฎ, Linuxโข, PowerShellโข, Vimโข ๋ฑ)๋ ๊ฐ ๊ถ๋ฆฌ์์ ์์ฐ์ด๋ฉฐ, ๋ณธ ๋ฌธ์์์๋ ์๋ณ ๋ฐ ์ฐธ๊ณ ๋ชฉ์ ใฎใฟใง ์ฌ์ฉ๋ฉ๋๋ค.
๋ณธ ์นํธ์ํธ์ ๋ชจ๋ ๋ด์ฉ์ ๋ ๋ฆฝ์ ์ผ๋ก ์์ฑ๋ ๋จ์ํ๋ ์์ฒด ์๊ฒฐํ ์ฐธ๊ณ ์๋ฃ์ด๋ฉฐ, ์ด๋ ํ ๊ณต์ ๋ฌธ์์๋ ๊ณ์ดยท์ธ์ ยท์ถ์ฒ ๊ด๊ณ๊ฐ ์์ต๋๋ค. ๋ช ๋ น ๋ชฉ๋ก, ํ๋๊ทธ ์ค๋ช , ์์ ๋ ๋ชจ๋ ์ ์์ ์๋ณธ ๋จ์ํ์ด๋ฉฐ, ๊ถ์ ์๋ ์ ๋ณด๊ฐ ํ์ํ ๊ฒฝ์ฐ ๊ฐ ๋๊ตฌ์ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์๊ธฐ ๋ฐ๋๋๋ค.
๋ช ๋ น ๊ตฌ๋ฌธ ๋ฐ ์ต์ ํ๋๊ทธ๋ ๋๊ตฌ ๋ฒ์ ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ต๋๋ค. ํ์๋๋ ๋ฒ์ ํ๊ทธ๋ ์์ ๋ฆด๋ฆฌ์ค๋ฅผ ๋ฐ์ํ๋ฉฐ, ๋ค๋ฅธ ๋ฒ์ ์์๋ ๋์์ด ๋ค๋ฅผ ์ ์์ต๋๋ค. ๋ณธ ์นํธ์ํธ๋ ์ํ๊ถ์์ ์ด๋ ํ ์ ํธ๋ ๊ถ์ฅ๋ ์๋ฏธํ์ง ์์ต๋๋ค.
์ํ๊ถ์ ๋๋ ์ ์๊ถ์๊ฐ ์ฌ์ดํธ์ ์ผ๋ถ ๋ด์ฉ์ ๋ํด ๊ถ๋ฆฌ ์นจํด๊ฐ ์๋ค๊ณ ํ๋จํ์๋ ๊ฒฝ์ฐ [email protected]์ผ๋ก ์ด๋ฉ์ผ์ ๋ณด๋ด ์ฃผ์ญ์์ค. ์ ํจํ ๊ถ๋ฆฌ ์ฆ๋ช ์ ๋ฐ์ ํ ํฉ๋ฆฌ์ ์ธ ๊ธฐ๊ฐ ๋ด์ ๊ด๋ จ ๋ด์ฉ์ ์์ ํ๊ฑฐ๋ ์ญ์ ํ๊ฒ ์ต๋๋ค.
๋ณธ ์ฌ์ดํธ๋ ์ฌ์ดํธ ์ ๋ณด์ ์ด์ฉ์ผ๋ก ์ธํด ๋ฐ์ํ๋ ์ด๋ ํ ์ง์ ์ ๋๋ ๊ฐ์ ์ ์ํด์ ๋ํด์๋ ๋ฒ์ ์ฑ ์์ ์ง์ง ์์ต๋๋ค.
Conda ์๊ฐ
Conda๋ 2012๋ Continuum Analytics(ํ Anaconda Inc)๊ฐ ์ฒ์ ์ถ์ํ ์คํ์์ค ํจํค์ง ๋ฐ ํ๊ฒฝ ๋งค๋์ ์ ๋๋ค. pip + virtualenv๊ฐ NumPy, SciPy, scikit-learn, PyTorch ๊ฐ์ ๊ณผํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฒด ์๊ฒฐ๋ ๋ฐฉ์์ผ๋ก ์ค์นํ ์ ์์๊ธฐ ๋๋ฌธ์ ๋ง๋ค์ด์ก์ต๋๋ค โ ์ด๋ฐ ํจํค์ง๋ ์ปดํ์ผ๋ C / Fortran / CUDA ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ฌถ์ด ์ ๊ณตํ๋๋ฐ, pip๊ฐ ์์ ์ ์ผ๋ก ํด์ํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๋๋ค. Conda๋ Python, R, Lua, Ruby ๋ฐ ๋๋ถ๋ถ์ ๋ค๋ฅธ ์ธ์ด ๋ฐํ์์ ์ํ ์ฌ์ ๋น๋ ํจํค์ง๋ฅผ ๋ฐฐํฌํ๊ณ , ์ด๋ฅผ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์ ์ค์นํฉ๋๋ค. ํ์ฌ ์์ ๋ผ์ธ์ Conda 24+์ ๋๋ค. ์๋ก์ด libmamba ์๋ฒ(`conda-libmamba-solver`, Conda 23.10๋ถํฐ ๊ธฐ๋ณธ)๋ mamba C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ ์์กด์ฑ ํด์์ ๋ค์ ๊ตฌํํด ํด์ ์๊ฐ์ ๋ถ ๋จ์์์ ๋ฐ๋ฆฌ์ด ๋จ์๋ก ์ค์์ต๋๋ค. ์์ฃผ ์ฐ๋ ๊ด๋ จ ํด๋ก๋ `mamba`(๋๋กญ์ธ CLI ๋์ฒด), `micromamba`(CI / Docker์์ ์ฌ์ฉ๋๋ ๋จ์ผ ๋ฐ์ด๋๋ฆฌ ์ค์น ํ๋ก๊ทธ๋จ), `pixi`(์ฐจ์ธ๋ Rust ๊ธฐ๋ฐ conda + lockfile ๋งค๋์ )๊ฐ ์์ต๋๋ค. Conda๋ GPLv3 ๋ผ์ด์ ์ค์ด๋ฉฐ, Anaconda ๋ฐฐํฌํ์ ๋๊ท๋ชจ ์กฐ์ง์ ์ํ ์์ฉ ํฐ์ด๋ฅผ ์ถ๊ฐํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Conda๋ `repo.anaconda.com`๊ณผ ๊ธฐํ ์ค์ ๋ ์ฑ๋์์ ๋ค์ด๋ก๋ํ๋ฉฐ, ์ฝ๋๋ ์ ๋ก๋ํ์ง ์์ต๋๋ค.
์นํธ์ํธ ๋ฒ์ 1.0.0