Mediile virtuale, explicate pe înțelesul oamenilor

De ce fiecare proiect Python are nevoie de propriul sandbox, ce fac de fapt venv/poetry/uv și cum oprești proiectele să se strice unul pe celălalt.

Mediile virtuale, explicate pe înțelesul oamenilor

Ai instalat un pachet pentru un proiect și acum un proiect complet diferit se prăbușește. Sună cunoscut? Felicitări, tocmai ai descoperit de ce există mediile virtuale.

Problema în 30 de secunde

Python are un singur folder global site-packages unde pip install aruncă totul. Dacă Proiectul A are nevoie de pandas 1.5 și Proiectul B are nevoie de pandas 2.1, ai o bătaie. Ultimul instalat câștigă, iar celălalt proiect se strică. Pe tăcute, desigur — Python e politicos din fire.

Un mediu virtual dă fiecărui proiect propriul folder site-packages izolat. Proiectul A primește pandas 1.5, Proiectul B primește pandas 2.1 și nu știu unul de celălalt. Problemă rezolvată.

Metoda încorporată: venv

Python vine cu venv din versiunea 3.3. Nu trebuie să instalezi nimic.

# Creează un mediu virtual într-un folder numit .venv
python -m venv .venv

# Activează-l (Linux/macOS)
source .venv/bin/activate

# Activează-l (Windows)
.venv\Scripts\activate

# Acum pip install se duce în .venv, nu în Python-ul de sistem
pip install pandas==2.1.0

Când ai terminat, deactivate te duce înapoi la Python-ul de sistem. Folderul .venv e doar un director obișnuit — șterge-l și mediul dispare.

Lucruri pe care lumea le uită

  • Adaugă .venv/ în .gitignore. Nu faci commit la mediu. Faci commit la un requirements.txt (sau pyproject.toml) și-l recreezi oriunde faci deploy.
  • Mereu fixează versiunile dependințelor. pip freeze > requirements.txt salvează versiunile exacte pe care le ai instalate. Fără asta, pip install ia ultima versiune și lucrurile s-ar putea strica în producție.
  • Un mediu per proiect. Nu împărtăși medii între proiecte decât dacă vrei să retrăiești exact problema pe care încercai s-o rezolvi.

Poetry: opțiunea de adult

venv + pip + requirements.txt funcționează dar are colțuri ascuțite. Poetry împachetează tot workflow-ul într-un singur tool:

# Instalează poetry (o singură dată)
pip install poetry

# Începe un proiect nou
poetry init

# Adaugă o dependință
poetry add pandas

# Instalează din fișierul lock (versiuni exacte, reproductibil)
poetry install

Poetry generează un pyproject.toml (cerințele tale) și un poetry.lock (versiuni fixate pentru fiecare dependință, inclusiv sub-dependințe). Fișierul lock e cel care face build-urile reproductibile — fa-i commit.

Poetry creează și gestionează mediul virtual pentru tine automat. Nu trebuie să-l activezi manual niciodată; poetry run python script.py rulează în interiorul mediului.

Când să-l folosești

  • Proiecte cu mai mult de câteva dependințe
  • Orice merge în producție sau e partajat cu o echipă
  • Când te-ai săturat să sincronizezi manual requirements.txt

uv: noul venit rapid

uv e un tool relativ nou (de la echipa Astral, aceiași oameni din spatele ruff) care înlocuiește pip, pip-tools, virtualenv și părți din Poetry într-un singur binar Rust. E rapid — de 10–100× mai rapid decât pip pentru rezolvare și instalare.

# Instalează uv
pip install uv

# Creează un venv
uv venv

# Instalează din requirements
uv pip install -r requirements.txt

# Sau gestionează un proiect (workflow de tip Poetry)
uv init
uv add pandas
uv sync

uv încă se maturizează, dar e deja excelent pentru:

  • Instalare rapidă de dependințe în pipeline-uri CI
  • Proiecte unde vrei un singur tool pentru medii + pachete
  • Oricine s-a săturat să aștepte 30 de secunde ca pip să rezolve un arbore de dependințe

Pe care să-l folosești?

Ai nevoie de…Folosește
Ceva care merge direct, fără instalarevenv + pip
Build-uri reproductibile + gestiunea dependințelorPoetry
Viteză mai presus de toate, bleeding edge OKuv
Un notebook de data science, calea cu cea mai mică rezistențăconda

Dacă abia începi, venv + pip e perfect. Învață cum funcționează mediile la nivel fundamental înainte să adaugi abstracții deasupra. Odată ce simți durerea de a gestiona manual requirements.txt pe mai multe proiecte, Poetry e pasul natural următor.

Lucrul important nu e ce tool. E că folosești unul dintre ele. A rula pip install în Python-ul global e modul în care ajungi să reinstalezi totul de la zero la fiecare șase luni.

Regula într-o propoziție

Fiecare proiect Python primește propriul mediu virtual, mereu, fără excepții, chiar dacă e un script minuscul. Cele trei minute necesare pentru setup-ul inițial salvează trei ore de depanare a conflictelor de dependințe mai târziu.