uv: de Python-pakketbeheerder die pip, pip-tools en venv vervangt (handleiding 2026)
Als je dit jaar enige tijd in een Python-project hebt doorgebracht, heb je waarschijnlijk uv zien verschijnen in een README- of CI-bestand. Het is een door Rust geschreven pakketbeheerder en virtualenv-tool van Astral (hetzelfde team achter ruff) - en het is 10-100x sneller dan de klassieke pip / pip-tools / venv-combinatie.
Deze gids behandelt: wat uv feitelijk vervangt, de vijf opdrachten die 95% van wat u dagelijks doet, en de twee gevallen waarin u zich bij de klassieke hulpmiddelen moet houden.
Wat UV vervangt
| Klassiek gereedschap | uv-equivalent | Versnellen |
|---|---|---|
| python -m venv .venv | uv venv | ~5x |
| pip install pkg | uv pip installeer pkg | ~10-50x |
| pip install -r vereisten.txt | uv pip install -r vereisten.txt | 20-100x op koude cache |
| pip-compile (pip-tools) | uv pip compileren | ~50x |
| python -m venv + source activatie voor elk project | uv run <cmd> | Slaat de activering volledig over |
Het snelheidsverschil is reëel. Het installeren van een gematigd Django-project (Django + DRF + selderij + redis + boto3 + ~40 transitieve deps) op een koude cache duurt ~45 seconden met pip en ~2 seconden met uv. Op een warme cache is uv in wezen direct omdat het een globale hard-linked cache gebruikt in plaats van bestanden naar elke venv te kopiëren.
De vijf commando's die je daadwerkelijk gaat gebruiken
1. Installeer uv zelf
BASH# macOS + Linux — one line, no sudo, no Python needed curl -LsSf https://astral.sh/uv/install.sh | sh # Windows PowerShell powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" # Or via brew / apt / your package manager (updated frequently) brew install uv
uv is een op zichzelf staand binair bestand - geen Python-bootstrap, geen eigen afhankelijkheden.
2. Maak een virtuele omgeving
BASHcd my-project uv venv # creates .venv/ using the current Python uv venv --python 3.13 # or pin a version — uv will download it if missing
In tegenstelling tot python -m venv kan uv de Python-versie ophalen waar u om vroeg. Geen "pyenv installeren, dan venv en dan activeren" driestapsdans meer.
3. Installeer pakketten
BASHuv pip install fastapi httpx # into the current venv uv pip install -r requirements.txt # bulk install uv pip install -e . # editable install of current project
De syntaxis is opzettelijk identiek aan pip — ruil pip voor uv pip en alles werkt. Migratiekosten: vijf toetsaanslagen.
4. Vereisten bevriezen/compileren
BASH# From an installed venv → requirements.txt (like `pip freeze`) uv pip freeze > requirements.txt # From a loose requirements.in → fully pinned requirements.txt (like pip-compile) uv pip compile requirements.in -o requirements.txt
De 'compileer'-stap is deterministisch: dezelfde invoer, dezelfde uitvoer, byte voor byte. Perfect voor reproduceerbare CI.
5. Voer een opdracht uit zonder de venv
BASHuv run pytest # runs pytest from the current venv uv run python manage.py migrate # any command, any script uv run --with ipython python # temporarily add ipython for this session
Dit is de killer-functie. Geen source .venv/bin/activate meer vóór elke opdracht. Geweldig in CI, geweldig in Makefiles, geweldig in shellscripts.
Een bestaand project migreren (2 minuten)
Ervan uitgaande dat u een requirements.txt heeft:
BASH# 1. Nuke the old venv rm -rf .venv # 2. Create the uv venv uv venv # 3. Install uv pip install -r requirements.txt # 4. Verify uv run python -c "import fastapi; print(fastapi.__version__)"
Vier commando's, klaar. Uw requirements.txt hoeft niet te veranderen. Uw pyproject.toml hoeft niet te veranderen. Uw CI hoeft nauwelijks te worden gewijzigd: verwissel de installatiestap en u bent klaar.
Het oorspronkelijke pad van pyproject.toml (uv-eerste projecten)
Voor projecten die helemaal opnieuw beginnen, gebruikt u de eigen workflow van uv - helemaal geen vereisten.txt:
BASHuv init my-project # generates pyproject.toml + .python-version + .gitignore cd my-project uv add fastapi # adds fastapi to pyproject.toml [dependencies] AND installs uv add --dev pytest # adds to dev-dependencies uv sync # installs exactly what pyproject.toml says (uses uv.lock) uv lock --upgrade # bumps every dependency to its latest compatible version
Dit heeft dezelfde vorm als cargo voor Rust of npm voor Node: één configuratiebestand, één vergrendelingsbestand, deterministische installaties. Als je in 2026 opnieuw begint, is dit het pad.
Wanneer moet je nog pip / venv gebruiken?
Twee gevallen:
1. Oudere CI-systemen die uv niet kunnen installeren. Als u vastzit aan een Jenkins-agent uit 2019 zonder shell-toegang, kan de wrijving bij het installeren van uv groter zijn dan de snelheidswinst. Elk modern CI-systeem (GitHub Actions, GitLab CI, CircleCI, BuildKite) heeft een uv-installatieprogramma van één regel.
2. Airgapped-omgevingen met een vergrendelde `pip`-mirror. uv is standaard ingesteld op PyPI maar ondersteunt --index-url - dit werkt meestal, maar sommige bedrijfsmirrors hebben subtiel gedrag (auth headers, JSON API versus Simple API) dat uv anders verwerkt. Test voordat u zich vastlegt.
Dat is het. Voor elk ander geval in 2026 – solo-ontwikkelaar, teamprojecten, open source, CI, Docker – is uv sneller, betrouwbaarder en vereist minder mentale overhead dan de klassieke stack.
De CI-wissel van 30 seconden
Vóór (GitHub-acties):
YAML- uses: actions/setup-python@v5 with: python-version: '3.13' - run: pip install -r requirements.txt - run: pytest
Na:
YAML- uses: astral-sh/setup-uv@v3 - run: uv sync - run: uv run pytest
CI-uitvoeringen nemen af van ~2 minuten naar ~15 seconden tijdens de installatiestap. Als uw testmatrix 5x per PR draait, is dat een echte cumulatieve besparing.
uv is het zeldzame hulpmiddel dat zowel sneller EN eenvoudiger is dan wat het vervangt. Als je in 2026 Python voor de kost schrijft, besteed dan 10 minuten aan het overstappen van één project. De gewoonte zal worden toegepast op elk nieuw project dat u aanraakt.
Volgende stap: de Python DevOps track omvat uv, ruff, Docker en de moderne Python-implementatiestack: 104 interactieve lessen.