๐ uv๋ก Python ํ๋ก์ ํธ ๊ด๋ฆฌํ๊ธฐ #
uv๋ Python ํ๋ก์ ํธ์์ ํจํค์ง ๊ด๋ฆฌ + ๊ฐ์ํ๊ฒฝ + Python ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ํ ๋ฒ์ ํด๊ฒฐํด์ฃผ๋ ์ต์ ๋๊ตฌ์
๋๋ค.
Rust๋ก ์์ฑ๋์ด ๊ธฐ์กด pip๋ณด๋ค 10~100๋ฐฐ ๋น ๋ฅด๋ฉฐ, pip, venv, pyenv๋ฅผ ๋์ฒดํ ์ ์๋ ์ฌ์ธ์ ํด์
๋๋ค โก
์ด ๊ธ์์๋ ์ค๋ฌด์์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋๋ก ์ ํํ ๋ช ๋ น์ด ๊ธฐ์ค์ผ๋ก ๊น๋ํ๊ฒ ์ ๋ฆฌํ์ต๋๋ค.
๐ฅ ์ค์นํ๊ธฐ #
macOS / Linux #
1curl -LsSf https://astral.sh/uv/install.sh | shWindows #
1powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"pip์ผ๋ก ์ค์น #
1pip install uv์ค์น ํ ๋ฒ์ ํ์ธ:
1uv --version1๏ธโฃ ํ๋ก์ ํธ ์์ฑ ๋ฐ ์ค์ #
๐ฆ ํ๋ก์ ํธ ์์ฑ #
1# ํ์ฌ ๋๋ ํ ๋ฆฌ์ ์๋ก์ด ํ์ด์ฌ ํ๋ก์ ํธ ํ๊ฒฝ์ ์ด๊ธฐํํ๋ ๊ธฐ๋ณธ์ ์ธ ํ์ผ๊ณผ ํด๋ ๊ตฌ์กฐ๊ฐ ์๋์ผ๋ก ์์ฑ
2uv init
3
4# ๊ธฐ๋ณธ ํ๋ก์ ํธ ์์ฑ
5uv init my-project
6
7# ์ค์ ํ์ผ๋ง ํ์ํ๋ค๋ฉด
8uv init --bare
9
10# ํน์ Python ๋ฒ์ ์ผ๋ก ์์ฑ
11uv init my-project --python 3.11
12
13# ๊ฐ์ํ๊ฒฝ ์์ด ์์ฑ
14uv init my-project --no-venvโ ๏ธ ๋ง์ฝ error: Failed to discover parent workspace; ๊ฐ ๋ฐ์ํ๋ค๋ฉด --no-workspace ์ต์
์ ๋ฃ์ด์ฃผ์ด ํ๋ก์ ํธ๋ฅผ ์์ฑ
๐ uv init ์ ์์ฑ๋๋ ํ์ผ #
uv init ์คํ ํ ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ์ ์๋ ํ์ผ๋ค์ด ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค.
1my-project/
2โโโ pyproject.toml # ํ๋ก์ ํธ ๋ฉํ๋ฐ์ดํฐ ๋ฐ ์์กด์ฑ ์ ์
3โโโ .python-version # ์ฌ์ฉํ Python ๋ฒ์ ๊ณ ์
4โโโ uv.lock # ์์กด์ฑ ๋ฒ์ ์ ๊ธ ํ์ผ (์๋ ์์ฑ)
5โโโ .venv/ # ๊ฐ์ํ๊ฒฝ ๋๋ ํ ๋ฆฌ
6โโโ src/
7 โโโ main.py # ๊ธฐ๋ณธ ์ง์
์ Tip:
uv.lockํ์ผ์ git์ ํฌํจํด์ผ ํ์ ์ ์ฒด๊ฐ ๋์ผํ ์์กด์ฑ ํ๊ฒฝ์ ๋ณด์ฅ๋ฐ์ ์ ์์ต๋๋ค.
๐ ์์กด์ฑ ๊ด๋ฆฌ #
1# ํจํค์ง ์ถ๊ฐ
2uv add requests
3
4# ํน์ ๋ฒ์ ์ถ๊ฐ
5uv add requests==2.31.0
6
7# ๊ฐ๋ฐ ์์กด์ฑ ์ถ๊ฐ
8uv add --dev pytest
9
10# ๋ก์ปฌ ํจํค์ง (editable ๋ชจ๋)
11uv add -e ./localpackageโ ์์กด์ฑ ์ ๊ฑฐ #
1uv remove requests
2uv remove --dev pytest๐ ์์กด์ฑ ๋๊ธฐํ #
1uv sync # ์ ์ฒด ์ค์น
2uv sync --dev # ๊ฐ๋ฐ ์์กด์ฑ ํฌํจ
3uv sync --no-dev # ๊ฐ๋ฐ ์์กด์ฑ ์ ์ธ๐ ์์กด์ฑ ์ ๊ธ #
1uv lock
2uv lock --dev
3uv lock --no-dev2๏ธโฃ ํจํค์ง ์ค์น (pip ์คํ์ผ) #
๐ฅ ๊ธฐ๋ณธ ์ค์น #
1uv pip install requests๐ฏ ํน์ ๋ฒ์ ์ค์น #
1uv pip install "requests==2.31.0"
2uv pip install "requests>=2.31.0"
3uv pip install "requests<3.0.0"๐งช ๊ฐ๋ฐ ๋๊ตฌ ์ค์น #
1uv pip install --dev pytest
2uv pip install --dev black isort mypyโ ํจํค์ง ์ ๊ฑฐ #
1uv pip uninstall requests
2uv pip uninstall -y requestsโฌ๏ธ ํจํค์ง ์ ๊ทธ๋ ์ด๋ #
1uv pip install --upgrade requests
2uv pip install --upgrade pip๐ ํจํค์ง ์กฐํ #
1uv pip search "data science"
2uv pip show requests
3uv pip list
4uv pip list outdated
5uv pip freeze # ํ์ฌ ํ๊ฒฝ์ ์์กด์ฑ requirements ํ์์ผ๋ก ์ถ๋ ฅ๐ค uv add vs uv pip install ์ฐจ์ด #
๋ ๋ช ๋ น์ด ๋ชจ๋ ํจํค์ง๋ฅผ ์ค์นํ์ง๋ง ์ฌ์ฉ ๋ชฉ์ ์ด ๋ค๋ฆ ๋๋ค.
| ๊ตฌ๋ถ | uv add | uv pip install |
|---|---|---|
| ์ฉ๋ | ํ๋ก์ ํธ ์์กด์ฑ์ผ๋ก ๋ฑ๋ก | ์ฆ์ ์ค์น (pip ํธํ) |
| pyproject.toml | โ ์๋ ์ ๋ฐ์ดํธ | โ ์ ๋ฐ์ดํธ ์ ํจ |
| uv.lock | โ ์๋ ๊ฐฑ์ | โ ๊ฐฑ์ ์ ํจ |
| ์ถ์ฒ ์ํฉ | ํ ํ๋ก์ ํธ, ๊ณต์ ํ๊ฒฝ | ์ผํ์ฑ ์ค์น, ์์ ํ ์คํธ |
Tip: ํ ํ๋ก์ ํธ์์๋
uv add๋ฅผ ์ฌ์ฉํด์ผpyproject.toml๊ณผuv.lock์ด ์ ๋ฐ์ดํธ๋์ด ํ์๊ณผ ํ๊ฒฝ์ ๊ณต์ ํ ์ ์์ต๋๋ค.
3๏ธโฃ ๊ฐ์ํ๊ฒฝ ๊ด๋ฆฌ #
๐๏ธ ๊ฐ์ํ๊ฒฝ ์์ฑ #
1uv venv
2uv venv --python 3.11
3uv venv --name myenv
4uv venv --clearโถ๏ธ ๊ฐ์ํ๊ฒฝ ํ์ฑํ #
macOS / Linux #
1source .venv/bin/activate
2source myenv/bin/activateWindows #
1.venv\Scripts\activate
2myenv\Scripts\activateโ ๊ฐ์ํ๊ฒฝ ๋นํ์ฑํ #
1deactivate4๏ธโฃ Python ๋ฒ์ ๊ด๋ฆฌ #
๐ฆ Python ์ค์น #
1uv python install 3.11
2uv python install 3.11.0
3uv python install 3.11 --force๐งฐ ๋ฒ์ ๊ด๋ฆฌ #
1uv python list
2uv python remove 3.11
3uv python pin 3.11โถ๏ธ ํน์ ๋ฒ์ ์คํ #
1uv run --python 3.11 script.py
2uv run --python 3.11 -m pytest5๏ธโฃ ์คํฌ๋ฆฝํธ ์คํ #
โถ๏ธ ๊ธฐ๋ณธ ์คํ #
1uv run script.py
2uv run -m module๐ฆ ์์กด์ฑ๊ณผ ํจ๊ป ์คํ #
1uv run --with-deps script.py
2uv run --no-deps script.py๐๏ธ ์ธ์ ์ ๋ฌ #
1uv run script.py --arg1 value1 --arg2 value2
2uv run -m pytest tests/ --verbose๐ ํ๊ฒฝ ๋ณ์ ์ค์ #
1uv run --env VAR1=value1 --env VAR2=value2 script.pyโก uv๊ฐ ๋น ๋ฅธ ์ด์ #
uv๋ ๋จ์ํ “๋น ๋ฅด๋ค"๋ ๋ง๋ก๋ง ์ค๋ช
๋์ง๋ง, ๊ทธ ์ด์ ๋ ๋ค์ ๊ธฐ์ ๋ค์ ์กฐํฉ์
๋๋ค.
| ๊ธฐ์ | ์ค๋ช |
|---|---|
| Rust ๊ตฌํ | ์ปดํ์ผ ์ธ์ด๋ก Python ๋๋น ์คํ ์๋ ์ฐ์ |
| ๋ณ๋ ฌ ์ฒ๋ฆฌ | ์ฌ๋ฌ ํจํค์ง๋ฅผ ๋์์ ๋ค์ด๋ก๋ยท์ค์น |
| ์ ์ญ ์บ์ | ํ ๋ฒ ๋ค์ด๋ก๋ํ ํจํค์ง๋ ํ๋ ๋งํฌ๋ก ์ฌ์ฌ์ฉ (๋์คํฌ ์ ์ฝ) |
| PubGrub ์๊ณ ๋ฆฌ์ฆ | pip์ ์์ฐจ ํ์๋ณด๋ค ํจ์จ์ ์ธ ์์กด์ฑ ํด๊ฒฐ ์๊ณ ๋ฆฌ์ฆ |
| HTTP/2 ์ง์ | ์ฐ๊ฒฐ ํ๋ง์ผ๋ก ๋คํธ์ํฌ ์์ฒญ ํจ์จํ |
๐ pip + venv + pyenv vs uv ๋น๊ต #
| ํญ๋ชฉ | ๊ธฐ์กด ๋ฐฉ์ | uv |
|---|---|---|
| ํ๋ก์ ํธ ์ด๊ธฐํ | ์๋ ์ค์ | uv init |
| ๊ฐ์ํ๊ฒฝ ์์ฑ | python -m venv .venv | ์๋ ์์ฑ |
| ๊ฐ์ํ๊ฒฝ ํ์ฑํ | ๋งค๋ฒ ์๋ | uv run ์ ์๋ |
| ํจํค์ง ์ค์น | pip install | uv add / uv pip install |
| ์์กด์ฑ ์ ๊ธ | pip freeze > requirements.txt | uv lock (์๋) |
| Python ๋ฒ์ ๊ด๋ฆฌ | pyenv ๋ณ๋ ์ค์น ํ์ | uv python install ํตํฉ |
| ์์กด์ฑ ํด๊ฒฐ ๋ฐฉ์ | ์์ฐจ ์ฒ๋ฆฌ | ๋ณ๋ ฌ ์ฒ๋ฆฌ (PubGrub) |
| ์บ์ ๋ฐฉ์ | ํ๋ก์ ํธ๋ณ ๊ฐ๋ณ ์ ์ฅ | ์ ์ญ ์บ์ + ํ๋ ๋งํฌ |
| ์๋ | ๊ธฐ์ค (1x) | 10~100x ๋น ๋ฆ |
๐๏ธ ์ค์ ํ๋ก์ ํธ ์์ #
๋ฐ์ดํฐ ๊ณผํ ํ๋ก์ ํธ #
1uv init data-science-project --python 3.11
2cd data-science-project
3uv add pandas numpy matplotlib scikit-learn
4uv add --dev jupyter notebook
5uv run jupyter notebookFastAPI ์น ์๋ฒ #
1uv init web-api --python 3.11
2cd web-api
3uv add fastapi uvicorn sqlalchemy pydantic
4uv add --dev pytest black mypy
5uv run uvicorn src.main:app --reload๋จธ์ ๋ฌ๋ ํ๋ก์ ํธ #
1uv init ml-project --python 3.11
2cd ml-project
3uv add torch torchvision transformers datasets
4uv add --dev jupyter wandb tensorboard
5uv run python src/train.py๐ก ์ค๋ฌด ํ #
- โ
uv syncํ๋๋ก ํ ํ๊ฒฝ ํต์ผ ๊ฐ๋ฅ - โ
uv lock์ผ๋ก ์์กด์ฑ ์ถฉ๋ ๋ฐฉ์ง - โ
uv run์ผ๋ก Python ๋ฒ์ ๊น์ง ํต์ - โ
pip + venv + pyenv๋์ฒด ๊ฐ๋ฅ
๐ฏ ์ด๋ฐ ๋ถ๋ค๊ป ์ถ์ฒ #
- โก ๋น ๋ฅธ Python ํ๊ฒฝ์ ์ํ์๋ ๋ถ
- ๐งฉ ์์กด์ฑ ๊ด๋ฆฌ์ ์คํธ๋ ์ค ๋ฐ๋ ๋ถ
- ๐ณ Docker / CI ํ๊ฒฝ์์ ์๋ ๊ฐ์ ์ด ํ์ํ ๋ถ
๐ ๋ง๋ฌด๋ฆฌ #
uv๋ ๋จ์ํ ํจํค์ง ๋งค๋์ ๊ฐ ์๋๋ผ
๐ Python ๊ฐ๋ฐ ํ๊ฒฝ ์ ์ฒด๋ฅผ ๊ด๋ฆฌํ๋ ์ฐจ์ธ๋ ๋๊ตฌ์
๋๋ค.
์์ผ๋ก Python ํ๋ก์ ํธ๋ ์ด๋ ๊ฒ ๊ด๋ฆฌํ๋ ๊ฒ์ด ํ์ค์ด ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค ๐
- โก ๋น ๋ฅธ ํจํค์ง ์ค์น
- ๐งฉ ์์กด์ฑ ๊ด๋ฆฌ ํตํฉ
- ๐ Python ๋ฒ์ ๊ด๋ฆฌ๊น์ง ํ ๋ฒ์
๐ ๊ธฐ์กด pip, venv, pyenv๋ฅผ ๋ฐ๋ก ์ฐ๋ ๋ถ๋ค์๊ฒ ๊ฐ๋ ฅ ์ถ์ฒ!