๐ uv๋ก Python ํ๋ก์ ํธ ๊ด๋ฆฌํ๊ธฐ
uv๋ Python ํ๋ก์ ํธ์์ ํจํค์ง ๊ด๋ฆฌ + ๊ฐ์ํ๊ฒฝ + Python ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ํ ๋ฒ์ ํด๊ฒฐํด์ฃผ๋ ์ต์ ๋๊ตฌ์
๋๋ค. ๊ธฐ์กด pip, venv, pyenv๋ฅผ ๋์ฒดํ ์ ์๋ ์ฌ์ธ์ ํด์ด๋ผ๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค โก
์ด ๊ธ์์๋ ์ค๋ฌด์์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋๋ก ์ ํํ ๋ช
๋ น์ด ๊ธฐ์ค์ผ๋ก ๊น๋ํ๊ฒ ์ ๋ฆฌํ์ต๋๋ค.
1๏ธโฃ ํ๋ก์ ํธ ์์ฑ ๋ฐ ์ค์
๐ฆ ํ๋ก์ ํธ ์์ฑ
1
2
3
4
5
6
7
8
| # ๊ธฐ๋ณธ ํ๋ก์ ํธ ์์ฑ
uv init my-project
# ํน์ Python ๋ฒ์ ์ผ๋ก ์์ฑ
uv init my-project --python 3.11
# ๊ฐ์ํ๊ฒฝ ์์ด ์์ฑ
uv init my-project --no-venv
|
๐ ์์กด์ฑ ๊ด๋ฆฌ
1
2
3
4
5
6
7
8
9
10
11
| # ํจํค์ง ์ถ๊ฐ
uv add requests
# ํน์ ๋ฒ์ ์ถ๊ฐ
uv add requests==2.31.0
# ๊ฐ๋ฐ ์์กด์ฑ ์ถ๊ฐ
uv add --dev pytest
# ๋ก์ปฌ ํจํค์ง (editable ๋ชจ๋)
uv add -e ./localpackage
|
โ ์์กด์ฑ ์ ๊ฑฐ
1
2
| uv remove requests
uv remove --dev pytest
|
๐ ์์กด์ฑ ๋๊ธฐํ
1
2
3
| uv sync # ์ ์ฒด ์ค์น
uv sync --dev # ๊ฐ๋ฐ ์์กด์ฑ ํฌํจ
uv sync --no-dev # ๊ฐ๋ฐ ์์กด์ฑ ์ ์ธ
|
๐ ์์กด์ฑ ์ ๊ธ
1
2
3
| uv lock
uv lock --dev
uv lock --no-dev
|
2๏ธโฃ ํจํค์ง ์ค์น (pip ์คํ์ผ)
๐ฅ ๊ธฐ๋ณธ ์ค์น
1
| uv pip install requests
|
๐ฏ ํน์ ๋ฒ์ ์ค์น
1
2
3
| uv pip install "requests==2.31.0"
uv pip install "requests>=2.31.0"
uv pip install "requests<3.0.0"
|
๐งช ๊ฐ๋ฐ ๋๊ตฌ ์ค์น
1
2
| uv pip install --dev pytest
uv pip install --dev black isort mypy
|
โ ํจํค์ง ์ ๊ฑฐ
1
2
| uv pip uninstall requests
uv pip uninstall -y requests
|
โฌ๏ธ ํจํค์ง ์
๊ทธ๋ ์ด๋
1
2
| uv pip install --upgrade requests
uv pip install --upgrade pip
|
๐ ํจํค์ง ์กฐํ
1
2
3
4
| uv pip search "data science"
uv pip show requests
uv pip list
uv pip list outdated
|
3๏ธโฃ ๊ฐ์ํ๊ฒฝ ๊ด๋ฆฌ
๐๏ธ ๊ฐ์ํ๊ฒฝ ์์ฑ
1
2
3
4
| uv venv
uv venv --python 3.11
uv venv --name myenv
uv venv --clear
|
โถ๏ธ ๊ฐ์ํ๊ฒฝ ํ์ฑํ
macOS / Linux
1
2
| source .venv/bin/activate
source myenv/bin/activate
|
Windows
1
2
| .venv\Scripts\activate
myenv\Scripts\activate
|
โ ๊ฐ์ํ๊ฒฝ ๋นํ์ฑํ
4๏ธโฃ Python ๋ฒ์ ๊ด๋ฆฌ
๐ฆ Python ์ค์น
1
2
3
| uv python install 3.11
uv python install 3.11.0
uv python install 3.11 --force
|
๐งฐ ๋ฒ์ ๊ด๋ฆฌ
1
2
3
| uv python list
uv python remove 3.11
uv python pin 3.11
|
โถ๏ธ ํน์ ๋ฒ์ ์คํ
1
2
| uv run --python 3.11 script.py
uv run --python 3.11 -m pytest
|
5๏ธโฃ ์คํฌ๋ฆฝํธ ์คํ
โถ๏ธ ๊ธฐ๋ณธ ์คํ
1
2
| uv run script.py
uv run -m module
|
๐ฆ ์์กด์ฑ๊ณผ ํจ๊ป ์คํ
1
2
| uv run --with-deps script.py
uv run --no-deps script.py
|
๐๏ธ ์ธ์ ์ ๋ฌ
1
2
| uv run script.py --arg1 value1 --arg2 value2
uv run -m pytest tests/ --verbose
|
๐ ํ๊ฒฝ ๋ณ์ ์ค์
1
| uv run --env VAR1=value1 --env VAR2=value2 script.py
|
๐ก ์ค๋ฌด ํ
- โ
uv sync ํ๋๋ก ํ ํ๊ฒฝ ํต์ผ ๊ฐ๋ฅ - โ
uv lock์ผ๋ก ์์กด์ฑ ์ถฉ๋ ๋ฐฉ์ง - โ
uv run์ผ๋ก Python ๋ฒ์ ๊น์ง ํต์ - โ
pip + venv + pyenv ๋์ฒด ๊ฐ๋ฅ
๐ฏ ์ด๋ฐ ๋ถ๋ค๊ป ์ถ์ฒ
- โก ๋น ๋ฅธ Python ํ๊ฒฝ์ ์ํ์๋ ๋ถ
- ๐งฉ ์์กด์ฑ ๊ด๋ฆฌ์ ์คํธ๋ ์ค ๋ฐ๋ ๋ถ
- ๐ณ Docker / CI ํ๊ฒฝ์์ ์๋ ๊ฐ์ ์ด ํ์ํ ๋ถ
๐ ๋ง๋ฌด๋ฆฌ
uv๋ ๋จ์ํ ํจํค์ง ๋งค๋์ ๊ฐ ์๋๋ผ ๐ Python ๊ฐ๋ฐ ํ๊ฒฝ ์ ์ฒด๋ฅผ ๊ด๋ฆฌํ๋ ์ฐจ์ธ๋ ๋๊ตฌ์
๋๋ค.
์์ผ๋ก Python ํ๋ก์ ํธ๋ ์ด๋ ๊ฒ ๊ด๋ฆฌํ๋ ๊ฒ์ด ํ์ค์ด ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค ๐
- โก ๋น ๋ฅธ ํจํค์ง ์ค์น
- ๐งฉ ์์กด์ฑ ๊ด๋ฆฌ ํตํฉ
- ๐ Python ๋ฒ์ ๊ด๋ฆฌ๊น์ง ํ ๋ฒ์
๐ ๊ธฐ์กด pip, venv, pyenv๋ฅผ ๋ฐ๋ก ์ฐ๋ ๋ถ๋ค์๊ฒ ๊ฐ๋ ฅ ์ถ์ฒ!