https://outlore.dev/blog/python-dev-2024/
๋ณธ๊ธ์ outlore.dev์ ๊ธ์ OpenAI๋ก ๋ฒ์ญํ ๊ธ์ ๋๋ค.
๋ ์ด์ ์คํธ๋ ์ค ๋ฐ์ ํ์ ์์
์ง๋ 5๋ ๊ฐ Python ๊ฐ๋ฐ์ ๋๋ถ์๊ฒ ๋ฐ์ ํด ์์ต๋๋ค. ์ ๋ ์ฃผ๋ก JavaScript ๊ฐ๋ฐ์์ด์ง๋ง, ๋ฒ์ ๋ฐ ์์กด์ฑ ๊ด๋ฆฌ, ์ฝ๋ ํฌ๋งทํ , ๋ฆฐํ , ํ์ ์์ ์ฑ์ ์ ๊ณตํ๋ ๋๊ตฌ๋ค์ด ์ฑ์ฅํ๋ ๊ฒ์ ๋ณด๋ฉฐ ๊ธฐ๋ปค์ต๋๋ค.
์์ฝ:
- Python ๋ฒ์ ๊ด๋ฆฌ๋ mise
- ๊ฐ์ ํ๊ฒฝ ๊ด๋ฆฌ๋ mise
- ์์กด์ฑ ๊ด๋ฆฌ๋ poetry ๋๋ uv
- ํฌ๋งทํ ๊ณผ ๋ฆฐํ ์ ruff
- ๋ฐํ์ ์คํค๋ง ๊ด๋ฆฌ๋ pydantic
Python ๋ฒ์ ๊ด๋ฆฌ
์ ๋ mise๋ฅผ ์ฌ์ฉํฉ๋๋ค. Mise๋ Python๋ฟ๋ง ์๋๋ผ Go, Node.js, ๊ธฐํ ์ธ์ด ๋ฐ ๋ฐํ์์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Mise๋ ํ์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ด๋ฏธ ์กด์ฌํ ์ ์๋ .python-version
๋ฐ .tool-versions
ํ์ผ์ ์ง์ํ๋ฉฐ, .mise.toml
ํ์ผ์ ํตํด ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋๋ ํ ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ ๋ ๊ฐ์ ํ๊ฒฝ์ ์๋์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค.
.mise.toml
์์ :
[tools]
python = "3.11"
[env]
_.python.venv = { path = ".venv", create = true } # ๊ฐ์ ํ๊ฒฝ์ด ์์ผ๋ฉด ์์ฑ
Mise๊ฐ ๋์ฒดํ๋ ๋๊ตฌ:
- pyenv
- asdf (๊ฐ์ฅ ์ ์ฌํ ๋๊ตฌ)
- brew Python ๋ฑ
๊ฐ์ ํ๊ฒฝ
๊ฐ์ ํ๊ฒฝ์ ์ฌ์ฉํ๋ฉด ์์คํ
Python์ด ์ค์น๋ ํจํค์ง๋ก ์ค์ผ๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. (JavaScript ๊ฐ๋ฐ์๋ผ๋ฉด ์ด๋ฅผ node_modules
๋๋ ํ ๋ฆฌ์ ์ ์ฌํ๋ค๊ณ ์๊ฐํ ์ ์์ต๋๋ค.) Mise๋ ๊ฐ์ ํ๊ฒฝ์ ์๋์ผ๋ก ์์ฑํด ์ฃผ๋ฏ๋ก ํ๋ก์ ํธ๋ณ๋ก ๋ณ๋์ ํ๊ฒฝ์ ์ ์งํ๊ธฐ๊ฐ ํธ๋ฆฌํฉ๋๋ค.
Mise๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ Python ๋ช ๋ น์ด๋ฅผ ํตํด ์๋์ผ๋ก ๊ฐ์ ํ๊ฒฝ์ ์์ฑํ ์ ์์ต๋๋ค:
python -m venv .venv
Mise๊ฐ ๋์ฒดํ๋ ๋๊ตฌ:
- virtualenvwrapper
- pipenv ๋ฑ
์์กด์ฑ ๊ด๋ฆฌ
์ฌ์ฉ ์ฌ๋ก์ ๋ฐ๋ผ uv์ poetry ์ค ํ๋๋ฅผ ์ ํํฉ๋๋ค.
- uv:
uv๋ pip์ ๋์ฒดํ๋ ๋น ๋ฅธ ํจํค์ง ๊ด๋ฆฌ ๋๊ตฌ์ ๋๋ค. ๋ํuv venv
๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ํ๊ฒฝ์ ์์ฑํ ์ ์์ต๋๋ค. uv๋ ํฅํ API ํ๋ฉด์ด ๋ณ๊ฒฝ๋ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค. - poetry:
๊ตฌ์กฐํ๋ ํ๋ก์ ํธ๋ฅผ ์ํด ์ฌ์ฉํฉ๋๋ค. JavaScript์npm
๊ณผ ์ ์ฌํ๊ฒ ์๋ํ๋ฉฐ,pyproject.toml
ํ์ผ์ดpackage.json
๊ณผ ์ ์ฌํฉ๋๋ค. poetry๋ ๊ฐ์ ํ๊ฒฝ์ ์๋์ผ๋ก ์์ฑํ๊ฑฐ๋ ์ด๋ฏธ ์์ฑ๋ ํ๊ฒฝ์ ์ฌ์ฉํฉ๋๋ค.
pyproject.toml
์์ :
[tool.poetry]
name = "poetry-demo"
version = "0.1.0"
description = ""
authors = ["Sébastien Eustace <sebastien@eustace.io>"]
readme = "README.md"
packages = [{include = "poetry_demo"}]
[tool.poetry.dependencies]
python = "^3.7"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
Mise์ Poetry์ ์กฐํฉ์ ๋ฒ์ ๊ด๋ฆฌ์ ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ๋ชจ๋ ์ฒ๋ฆฌํ ์ ์๋ ๊ฐ๋ ฅํ ๋ฐฉ๋ฒ์ ๋๋ค.
๋์ฒด ๋๊ตฌ:
- pip
- pip-tools ๋ฑ
ํฌ๋งทํ ๊ณผ ๋ฆฐํ
- ruff:
์ฝ๋ ํฌ๋งทํ , ๋ฆฐํ , import ์ ๋ฆฌ๋ฅผ ์ํํ ์ ์๋ ๋๊ตฌ์ ๋๋ค. VSCode ํ์ฅ๋ ์ง์ํฉ๋๋ค. - Pylance:
ํ์ ๊ฒ์ฌ ๋ฐ ๋ถ์์ ์ํด ์ฌ์ฉํฉ๋๋ค. VSCode์์ ํ์ ์ฒดํฌ๋ฅผ ํ์ฑํํ๋ ค๋ฉด.vscode/settings.json
์ ๋ค์์ ์ถ๊ฐํ์ธ์:{ "python.analysis.typeCheckingMode": "basic" }
Ruff๊ฐ ๋์ฒดํ๋ ๋๊ตฌ:
- black
- pylint
- isort
- autopep8 ๋ฑ
Tip. Visual Studio Code Formatter ๋จ์ถํค Option + Shift + f
๋ฐํ์ ์คํค๋ง
- pydantic:
๋ฐ์ดํฐ ์ ํจ์ฑ์ ๊ฒ์ฌํ๊ณ ์ง๋ ฌํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. Python์์ TypeScript์ zod์ ์ ์ฌํ ์ญํ ์ ํฉ๋๋ค.
๋์ฒด ๋๊ตฌ:
- dataclasses ๋ฑ
'๐งโ๐ป Develop' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] Dunder / Magic Methods (1) (0) | 2024.12.29 |
---|---|
[Memory] Process Memory ์ฒดํฌ (0) | 2024.12.26 |
[Airflow 3] What's new Airflow 3 (0) | 2024.10.25 |
Slack-Bolt Reload๋ก ๊ฐ๋ฐ์ ์คํํ๊ฒ (feat. fastapi) (0) | 2024.10.04 |
[golang-jwt] 401 "Token used beford issued" (0) | 2024.09.26 |