Post

[Python] ๐Ÿš€ uv๋กœ ํ”„๋กœ์ ํŠธ & ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ์™„๋ฒฝ ๊ฐ€์ด๋“œ

[Python] ๐Ÿš€ uv๋กœ ํ”„๋กœ์ ํŠธ & ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ์™„๋ฒฝ ๊ฐ€์ด๋“œ

๐Ÿ 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

โ›” ๊ฐ€์ƒํ™˜๊ฒฝ ๋น„ํ™œ์„ฑํ™”

1
deactivate

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๋ฅผ ๋”ฐ๋กœ ์“ฐ๋˜ ๋ถ„๋“ค์—๊ฒŒ ๊ฐ•๋ ฅ ์ถ”์ฒœ!

This post is licensed under CC BY 4.0 by the author.