uv sync și uv.lock în Python

Aduce mediul .venv exact la versiunile din uv.lock: instalează ce lipsește și șterge ce nu mai e în proiect.

Sintaxă
uv sync
uv sync --locked
uv sync --no-dev
uv lock
uv lock --upgrade

Ce face uv sync și uv.lock

uv.lock este fișierul în care uv notează versiunea exactă a fiecărui pachet din proiect, inclusiv dependențele dependențelor, plus sumele de control ale fișierelor. Este generat de uv lock (și automat de uv add, uv run, uv sync) și se pune în Git.

uv sync face ca .venv să corespundă exact fișierului de blocare: instalează pachetele care lipsesc și dezinstalează pachetele care nu mai sunt în proiect. Este comanda pe care o rulezi după ce clonezi un proiect sau după git pull. Implicit instalează și grupul dev; pe server folosești --no-dev.

Cu --locked, uv dă eroare dacă uv.lock nu mai corespunde cu pyproject.toml, în loc să-l actualizeze: util în CI. uv lock --upgrade recalculează versiunile la cele mai noi permise de limitele din pyproject.toml.

Parametri

Parametru Descriere
--locked Eroare dacă uv.lock trebuie actualizat.
--frozen Folosește uv.lock așa cum este, fără să-l verifice față de pyproject.toml.
--no-dev Fără grupul dev.
--all-extras Instalează și toate dependențele opționale.
lock --upgrade-package pachet Actualizează în uv.lock doar acel pachet.

Ce returnează

Lista pachetelor instalate (+) sau dezinstalate (-), ori Checked N packages dacă mediul era deja la zi.

Exemple

Exemplul 1: Mediu nou pentru un proiect clonat

Folderul .venv nu vine din Git; uv sync îl creează din uv.lock. A doua rulare doar verifică.

git clone https://github.com/ana/magazin.git
cd magazin
uv sync
uv sync

Ieșire în terminal

Using CPython 3.14.7
Creating virtual environment at: .venv
Resolved 12 packages in 7ms
Installed 11 packages in 12ms
 + certifi==2026.10.23
 + charset-normalizer==3.5.2
 + idna==3.20
 + iniconfig==2.3.1
 + magazin==0.1.0 (from file:///home/ana/magazin)
 + packaging==26.3
 + pluggy==1.7.0
 + pygments==2.21.0
 + pytest==9.1.1
 + requests==2.34.2
 + urllib3==2.8.0
Resolved 12 packages in 9ms
Checked 11 packages in 2ms

Exemplul 2: Pe server, fără uneltele de dezvoltare

uv sync --locked --no-dev

Ieșire în terminal

Resolved 12 packages in 6ms
Uninstalled 5 packages in 48ms
 - iniconfig==2.3.1
 - packaging==26.3
 - pluggy==1.7.0
 - pygments==2.21.0
 - pytest==9.1.1

Exemplul 3: Arborele dependențelor din uv.lock

uv tree

Ieșire în terminal

Resolved 12 packages in 4ms
magazin v0.1.0
├── requests v2.34.2
│   ├── certifi v2026.10.23
│   ├── charset-normalizer v3.5.2
│   ├── idna v3.20
│   └── urllib3 v2.8.0
└── pytest v9.1.1 (group: dev)
    ├── iniconfig v2.3.1
    ├── packaging v26.3
    ├── pluggy v1.7.0
    └── pygments v2.21.0

Greșeli frecvente

  • Instalezi ceva cu uv pip install și apoi rulezi uv sync: pachetul este dezinstalat, pentru că nu e în uv.lock. Adaugă-l cu uv add.
  • Pui uv.lock în .gitignore. Fișierul trebuie să fie în Git, ca toată lumea să aibă aceleași versiuni.
  • Rulezi pe server uv sync fără --locked și versiunile se schimbă în tăcere. În CI și la deploy folosește --locked.

Comenzi înrudite

  • uv add și uv remove: Adaugă sau elimină o dependență: actualizează pyproject.toml, uv.lock și mediul .venv dintr-o singură comandă.
  • uv run: Rulează un script sau o comandă în mediul proiectului, după ce verifică că pachetele instalate se potrivesc cu uv.lock.
  • uv init: Creează un proiect Python nou cu uv: pyproject.toml, .python-version, README și un depozit Git.
  • pip freeze: Afișează pachetele instalate în formatul nume==versiune, gata de salvat în requirements.txt.
  • requirements.txt: Fișierul text cu pachetele de care are nevoie un proiect, câte unul pe rând, instalat cu pip install -r.