Virtuele Python-omgevingen in 2026: venv, uv, pipx, poëzie - Wanneer gebruik je welke
Elke Python-tutorial zegt "gebruik een virtuele omgeving" en gaat verder. Deze gaat nog een stap verder: wat een venv eigenlijk IS, de vier tools die de moeite waard zijn om te kennen in 2026, een beslissingsboom van 60 seconden om de juiste te kiezen, en de twee fouten die je setup binnen een week kapot maken.
Wat een virtuele omgeving eigenlijk is
Een venv is een map die een symlink van een Python-interpreter bevat plus een privé `site-packages/`. Wanneer het "geactiveerd" is, staat PATH voor <venv>/bin, dus python en pip in je shell wijzen naar de kopieën van de venv. pip install X schrijft naar de site-packages/ van de venv, niet naar die van systeem Python.
Dat is het. Geen magie. Het is een map met een symbolische link en een pyvenv.cfg.
BASH$ python -m venv .venv $ ls .venv/ bin/ include/ lib/ pyvenv.cfg $ cat .venv/pyvenv.cfg home = /opt/homebrew/opt/python@3.13/bin include-system-site-packages = false version = 3.13.2
Al het andere (scripts activeren, wrappers, pakketbeheerders) is gemak bovenop deze vorm.
Waarom je er altijd een nodig hebt
Zonder venv schrijft pip install X de site-packages/ van Python naar uw systeem. Drie problemen:
1. Conflicten. Project A heeft django==4.2 nodig; Project B heeft django==5.1 nodig. Onmogelijk zonder venvs.
2. Reproduceerbaarheid. "Werkt op mijn machine" is een systeem-Python-probleem. Een venv-momentopname IS de omgeving.
3. Opruimen. Een project verwijderen? Verwijder de venv-map. Systeem-Python-installaties stapelen zich voor altijd op.
Op macOS 12+ en de meeste Linux-distributies is systeem-Python nu eigendom van het besturingssysteem — pip kan zelfs weigeren te installeren zonder --break-system-packages. Dat is een hint.
De 4 tools die de moeite waard zijn om te kennen
1. venv — de stdlib-basislijn
Wordt geleverd bij elke Python 3.3+ installatie. Geen afhankelijkheden. De universele terugval:
BASHpython -m venv .venv # create source .venv/bin/activate # macOS / Linux .venv\Scripts\activate # Windows pip install -r requirements.txt deactivate # or close the shell
Gebruik wanneer: een tutorial schrijven, ervoor zorgen dat een script overal werkt, of in een vergrendeld CI waar u niets kunt installeren.
2. uv — de moderne standaard (2026)
Rust-geschreven, 10-100x sneller dan pip. Vervangt venv + pip + pip-tools + pyenv-download-python. Zie onze uv deep-dive voor de volledige rondleiding.
BASHuv venv # create venv (uses current Python) uv venv --python 3.13 # or download + pin a version uv pip install -r requirements.txt uv run pytest # run without activating uv add fastapi # append to pyproject.toml + install uv sync # install exactly what pyproject.toml says
Gebruiken wanneer: elk project uit 2026 — solo, team, CI, Docker. Het snelheidsverschil op een koude cache is reëel (45s pip → 2s uv op een typisch Django-project).
3. pipx — voor CLI-tools
Wanneer u een CLI zoals ruff, httpie, black, youtube-dl, mypy installeert, wilt u deze niet in uw projectvenv hebben (waarom zou u afhankelijk zijn van ruff om import project.things te laten werken?). En je wilt het niet in systeem Python (conflicten). pipx plaatst elk in zijn eigen geïsoleerde venv, maar stelt de CLI globaal bloot:
BASHpipx install ruff pipx install httpie pipx install black ruff check . # works from anywhere, no activation httpie GET api.github.com black .
Gebruiken wanneer: een op Python gebaseerde CLI installeren. Vuistregel: pipx install X als X een uitvoerbaar bestand levert dat je vanuit elk project kunt uitvoeren; uv pip install X als X een bibliotheek is die u importeert.
Moderne vervanging: uv tool install ruff doet hetzelfde zonder een aparte pipx-installatie. Kies een van beide.
4. poëzie — volwassen afhankelijkheidskluis (dalend aandeel)
Voordat uv landde, was 'poëzie' het moderne verpakkingsinstrument bij uitstek. Uitstekende afhankelijkheidsoplosser, deterministische poetry.lock, nauwe integratie met pyproject.toml. Nog steeds solide – maar langzamer dan uv en voegt cognitieve overhead toe.
BASHpoetry new my-project poetry add fastapi poetry install poetry run pytest poetry publish
Gebruiken wanneer: een bestaand project al poëzie gebruikt, of je poëzie-specifieke plug-ins nodig hebt (bijvoorbeeld poetry-plugin-export). Voor NIEUWE projecten in 2026 brengt uv u daar sneller met een kleinere footprint.
De beslisboom van 60 seconden
Dat is het. 90% van de Python-ontwikkelaars van vandaag kan uit deze lijst kiezen zonder ooit pyenv, virtualenvwrapper, pew of conda nodig te hebben.
Conda — het speciale geval
conda is een apart universum: pakketbeheerder + venv-beheerder + Python-distributeur + C-bibliotheekbeheerder, voornamelijk voor wetenschappelijk Python. Als je zwaar numeriek werk doet met numpy / scipy / pandas / GPU-stacks die overeenkomende CUDA + cuDNN-versies nodig hebben, kan miniconda nog steeds de moeite waard zijn - de vooraf gecompileerde binaire bestanden besparen uren versus pip.
Anders: gewone uv is nu ook concurrerend op wetenschappelijke stapels (numpy / pandas-installaties zijn seconden, geen minuten). Grijp niet naar conda tenzij je specifiek een C-bibliotheek bindende pip nodig hebt die je niet gemakkelijk kunt produceren.
De twee fouten die je setup binnen een week kapot maken
1. .venv/ committen aan git
Een venv bevat:
- Absolute paden naar uw specifieke Python-installatie.
- Gecompileerde
.pyc-bestanden. - Binaire bestanden die besturingssysteemspecifiek zijn.
Beloof dat → uw teamgenoot op Windows kan niets uitvoeren. Voeg EERST .venv/ (en venv/, .env/) toe aan uw .gitignore en maak vervolgens de venv.
2. Activeren in de verkeerde shell
source .venv/bin/activate stelt env vars alleen in de HUIDIGE shell in. Als u een nieuw terminaltabblad opent, keert u terug naar systeem Python. Twee veilige patronen:
1. Elke sessie opnieuw activeren — het standaardproces.
2. `uv run` / `poetry run` / `python -m project` — helemaal nooit activeren. Voer opdrachten uit vanuit een nieuwe shell voorafgegaan door de tool. Geweldig in Makefiles, CI, npm-scripts, git hooks.
Regel voor scripts: als het een one-liner is die wordt uitgevoerd vanuit CI of een Makefile, activeer deze dan NIET - gebruik uv run pytest of het volledige pad .venv/bin/pytest. Activering is alleen voor interactieve shells.
Migratie tussen tools
pip + venv → uv:
BASHrm -rf .venv uv venv uv pip install -r requirements.txt
Vereisten.txt blijft woordelijk werken. Twee minuten.
poëzie → uv:
BASHuvx migrate-to-uv # community tool, converts pyproject.toml
venv → poëzie:
BASHpoetry init poetry add $(pip freeze | cut -d= -f1)
Verificatie
Controleer na het instellen altijd WELKE Python + pip je gebruikt:
BASH$ which python /path/to/project/.venv/bin/python # ✅ venv /opt/homebrew/bin/python # ❌ system, activation didn't take $ which pip /path/to/project/.venv/bin/pip # ✅ venv $ python -c "import sys; print(sys.prefix)" /path/to/project/.venv # ✅ venv
Als welke python na activering een systeempad laat zien, is er iets mis - meestal heb je het geactiveerd in een subshell die al is afgesloten.
Virtuele omgevingen zijn een van de weinige Python-onderwerpen waarop het moderne antwoord (2026) echt eenvoudiger is dan het historische antwoord. uv voor nieuwe projecten, venv voor scripts, pipx voor CLI's. Klaar.
Volgende stap: de Python DevOps-track omvat uv + ruff + Docker + de moderne Python-implementatiestack - hands-on met echte Python in uw browser.