Containerizarea unui proiect Python cu UV
- 2 minute de citit
- 2 exemple de cod în Docker
Disponibil și în English
Pe această pagină
Introducere
Salut! 👋
Am vrut să scriu acest scurt articol despre containerizarea unui proiect Python care folosește uv ca manager de proiect. Voi prezenta ce este UV și cum să scriu un Dockerfile pentru un astfel de proiect, pe care îl voi folosi și eu ca referință în viitor.
Ce este UV?
UV este un manager de proiecte și de pachete pentru proiecte Python, și este foarte rapid 🚀!
Viteza lui vine din faptul că este scris în Rust 🦀 de la zero.
Cum diferă de pip
Diferă de pip prin faptul că este mult mai rapid și mult mai eficient. În al doilea rând, pip este doar
un manager de pachete, în timp ce uv face mult mai mult și este mai modern.
UV a fost creat pentru a înlocui unelte precum:
- pip
- pip-tools
- pipx
- poetry
- pyenv
- twine
- virtualenv
Asta înseamnă că uv poate fi folosit pentru a instala diferite versiuni de Python, precum 3.13, 3.12, 3.11, și pentru
a crea medii virtuale (venv-uri). De asemenea, atunci când folosiți comanda uv tool (care înlocuiește pipx), poate
fi folosit pentru a instala unelte scrise în Python într-un mediu separat de mediul aplicației.
Pentru a executa o unealtă, puteți folosi comanda uv run nume-unealtă și numele uneltei. Eu folosesc de obicei
doar următoarele unelte: black, isort și ruff.
Dockerfile
Acesta este Dockerfile-ul meu pe care îl folosesc pentru proiecte:
FROM python:3.12-slim-bookworm# Installer-ul necesită curl (și certificate) pentru a descărca arhiva de releaseRUN apt-get update && apt-get install -y --no-install-recommends curl ca-certificates# Descarcă ultimul installerADD https://astral.sh/uv/install.sh /uv-installer.sh# Rulează installer-ul apoi șterge-lRUN sh /uv-installer.sh && rm /uv-installer.sh# Asigură că binarul instalat se află în `PATH`ENV PATH="/root/.local/bin/:$PATH"# copiază codulWORKDIR /appCOPY pyproject.toml /appRUN uv syncCOPY . .CMD ["uv", "run", "python", "-m", "app.main"]Motivul pentru care rulez uv sync înainte de COPY . . este să beneficiez de cache-ul pe care îl face
builder-ul containerului pentru fiecare layer. Astfel, dacă am o modificare mică în cod și nu modific dependențele din
pyproject.toml, build-ul containerului va fi rapid, pentru că toate layer-ele anterioare vor fi luate din cache și doar
ultimele două layer-e vor fi folosite pentru build:
COPY . .CMD ["uv", "run", "python", "-m", "app.main"]Concluzie
În acest articol am explorat cum să containerizăm un proiect Python care folosește UV.
UV se dovedește a fi o alternativă modernă și rapidă la unelte tradiționale precum pip și poetry, oferind funcționalități extinse pentru gestionarea mediilor virtuale și a dependențelor.
Ne vedem data viitoare! 😄