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 unrequirements.txt(saupyproject.toml) și-l recreezi oriunde faci deploy. - Mereu fixează versiunile dependințelor.
pip freeze > requirements.txtsalvează versiunile exacte pe care le ai instalate. Fără asta,pip installia 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ă instalare | venv + pip |
| Build-uri reproductibile + gestiunea dependințelor | Poetry |
| Viteză mai presus de toate, bleeding edge OK | uv |
| 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.