Les 2
Python-omgeving: venv en pip
Een eigen werkomgeving per project met venv en pakketten installeren met pip.
🎯 Na deze les kun je
- een virtuele omgeving maken en activeren
- pakketten installeren en vastleggen in requirements.txt
- uitleggen waarom je per project een venv gebruikt
Je schrijft een script dat requests gebruikt (les 25), en het werkt. Een halfjaar later begin je een ander project dat een nieuwere versie van requests nodig heeft. Je installeert die, en nu werkt je oude script niet meer. Of je stuurt je project naar een collega, en die krijgt meteen ModuleNotFoundError. De oplossing is een virtuele omgeving (venv) per project: een eigen map met een eigen Python en eigen pakketten, los van de rest van je computer. In deze les leer je die maken, pakketten installeren met pip en vastleggen wat je project nodig heeft.
Welke Python draai je eigenlijk?
Op één computer staan vaak meerdere Python-versies. Controleer welke je gebruikt:
python3 --version
Python 3.13.5
Op Windows heet het commando meestal py of python; op Linux en macOS python3. In deze cursus schrijven we python3; gebruik wat bij jou werkt.
Een gewoonte die veel problemen voorkomt: start hulpprogramma's die bij Python horen via python3 -m:
python3 -m venv .venv
python3 -m pip install requests
-m betekent: voer deze module uit met deze Python. Zo weet je zeker dat pip pakketten installeert voor dezelfde Python die je straks gebruikt. Los pip kan bij een andere Python horen.
Een venv maken en activeren
In de map van je project:
python3 -m venv .venv
Dit maakt een map .venv met een kopie van (of link naar) Python en een eigen, lege map voor pakketten. .venv is de gebruikelijke naam; editors als VS Code herkennen hem automatisch.
Activeren:
| Systeem | Commando |
|---|---|
| Linux, macOS | source .venv/bin/activate |
| Windows (PowerShell) | .venv\Scripts\Activate.ps1 |
| Windows (cmd) | .venv\Scripts\activate.bat |
Je prompt krijgt (.venv) ervoor. Controleer welke Python nu actief is:
which python
/home/student/project/.venv/bin/python
(Op Windows: where python.) Binnen een actieve venv mag je gewoon python en pip typen; die wijzen naar de venv. Terug naar normaal met deactivate.
Activeren is eigenlijk alleen een gemak: het zet .venv/bin vooraan in je PATH. Je kunt ook direct .venv/bin/python script.py uitvoeren, zonder te activeren. Dat is handig in scripts en cron.
Pakketten installeren met pip
pip install requests
pip install "requests==2.32.3" # precies deze versie
pip install --upgrade requests # bijwerken
pip uninstall requests
pip list # wat is er geïnstalleerd?
pip haalt pakketten van PyPI (Python Package Index), installeert ze en ook alles waar ze zelf van afhangen. Bij requests komen zo ook urllib3, idna, certifi en charset-normalizer mee.
Vastleggen: requirements.txt
Om je project ergens anders opnieuw op te zetten, leg je vast welke pakketten het nodig heeft:
pip freeze > requirements.txt
certifi==2025.8.3
charset-normalizer==3.4.3
idna==3.10
requests==2.32.5
urllib3==2.5.0
(Je versienummers kunnen anders zijn.) pip freeze zet alles in de venv vast, met exacte versies. Iemand anders (of jij op een nieuwe laptop) doet dan:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
en heeft precies dezelfde versies.
Twee afspraken:
.venvgaat niet in git. Zet het in.gitignore. Een venv is gebonden aan de computer en het pad waar hij gemaakt is; je maakt hem altijd opnieuw uitrequirements.txt.requirements.txtgaat wel in git.
Je kunt requirements.txt ook met de hand schrijven, met alleen de pakketten die je zelf gebruikt (requests>=2.31). Dat is overzichtelijker, maar minder exact. In les 32 zie je pyproject.toml, waarin moderne projecten hun afhankelijkheden vastleggen.
De typische fout: het pakket staat in de verkeerde omgeving
pip install requests
python3 mijnscript.py
Traceback (most recent call last):
File "/home/student/project/mijnscript.py", line 1, in <module>
import requests
ModuleNotFoundError: No module named 'requests'
Maar je hebt het net geïnstalleerd! Bijna altijd betekent dit: pip en python3 horen bij verschillende omgevingen. Bijvoorbeeld: je venv was niet actief toen je installeerde, of je editor gebruikt een andere Python dan je terminal.
Zo zoek je het uit:
which python3
python3 -m pip --version
Beide paden moeten in dezelfde .venv wijzen. Vanuit Python zelf:
import sys
print(sys.executable)
Die regel print het pad van de Python die het script echt uitvoert. Kies in je editor dezelfde interpreter (in VS Code: Python: Select Interpreter).
Op recente Linux-distributies krijg je bij pip install buiten een venv de melding error: externally-managed-environment. Dat is bewust: de systeem-Python is van de distributie, en pakketten die je daar installeert kunnen systeemtools breken. Het antwoord is niet --break-system-packages, maar: maak een venv.
Oefenen
Oefening 1. Maak een map weerapp, maak er een venv in, activeer hem, installeer requests en leg de afhankelijkheden vast. Schrijf de commando's op.
Modelantwoord oefening 1
mkdir weerapp
cd weerapp
python3 -m venv .venv
source .venv/bin/activate
pip install requests
pip freeze > requirements.txt
Oefening 2. Een collega stuurt je een zip met app.py, requirements.txt en een map .venv. Wat doe je met die map, en hoe zet je het project op?
Modelantwoord oefening 2
De meegestuurde .venv gooi je weg; die hoort bij de computer van je collega en werkt bij jou meestal niet. Daarna:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Vraag je collega om .venv voortaan in .gitignore te zetten.
Oefening 3. Je krijgt ModuleNotFoundError: No module named 'requests', terwijl pip list het pakket toont. Noem twee manieren om te controleren welke Python je script uitvoert.
Modelantwoord oefening 3
- In de terminal
which python3(ofwhere pythonop Windows) enpython3 -m pip --versionvergelijken. - In het script
import sys; print(sys.executable)zetten.
Kijk ook welke interpreter je editor gebruikt.
Lab: een project opzetten met venv en requirements.txt
- In de map
weerappvan het lab staatapp.py, datrequestsenrichgebruikt. - Maak een venv in
weerapp/.venven installeer de twee pakketten. - Leg de afhankelijkheden vast in
weerapp/requirements.txt. - Maak een
.gitignorewaarin.venv/staat. - Controleer met
beetje check python-les2. De check maakt een nieuwe venv, installeert jouwrequirements.txten draaitapp.py.
Samenvatting
- Gebruik per project een eigen venv:
python3 -m venv .venv, en activeer hem. - Start tools via
python3 -mzodat ze bij de juiste Python horen. pip install,pip list,pip freeze > requirements.txtenpip install -r requirements.txt..venvniet in git,requirements.txtwel.ModuleNotFoundErrorna een installatie betekent bijna altijd: een andere Python dan je denkt. Controleer metsys.executable.
In les 3 duik je dieper in strings: opmaak, methodes en encodings.
Lab
Project opzetten met venv en requirements.txt
💻 Dit lab doe je op je eigen computer met Docker. Start de lab-container met (geeft de opdracht een eigen startcommando, gebruik dan dat):
$ docker run -it --rm registry.wizg.it/webhosting/beetje-labs:python-les2
Klaar? Controleer je werk met:
$ beetje check python-les2