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 ruleziuv sync: pachetul este dezinstalat, pentru că nu e în uv.lock. Adaugă-l cuuv 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 syncfă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.