22 januari 2024 Erwin Matijsen
Geplaatst in Tutorial
Je hoeft niet altijd het wiel zelf uit te vinden, ook in het programmeren niet. Veel functionaliteit is al een keer geschreven en goed herbruikbaar. Er zijn talloze packages en libraries die je kunt installeren en in je eigen project kunt gebruiken. Een groot deel van die packages kun je eenvoudig installeren met pip. Op pypi.org vind je die packages.
Het is aan te raden om packages te installeren in een eigen omgeving behorende bij het project waaraan je werkt. Je kunt ze wel systeembreed installeren, maar dit kan voor problemen zorgen. Stel dat je aan twee projecten werkt, die beiden requests nodig hebben. Installeer je requests nu systeembreed, dan zijn beide projecten gedwongen altijd dezelfde versie van requests te gebruiken. Maar misschien kan het ene project nog niet naar de nieuwste versie, om wat voor reden dan ook. Dan ben je gedwongen in al je projecten op de oude versie te blijven.
Daarom kun je het best per project werken met een zogenaamde virtual environment. Een virtual environment is een afgeschermde omgeving per project, waarin de packages worden geïnstalleerd. In project A kun je zo de laatste versie van requests installeren, terwijl je het in project B houdt bij een oudere versie. Je maakt virtual environments met venv.
In deze tutorial leer je werken met venv en pip.
Controleren of pip en venv beschikbaar zijn
Voordat je verdergaat met de tutorial is het belangrijk te controleren of pip en venv beschikbaar zijn.
pip
Er zijn meerdere manieren om packages te installeren. Door Python zelf wordt pip aanbevolen, en sinds Python 3.4 is pip standaard onderdeel van Python-installaties. Het is (hierdoor) de meest gebruikte methode om packages te installeren. Als je een recente versie van Python (3.4 of hoger) hebt geïnstalleerd via python.org, dan heb je pip tot je beschikking. Je kunt dit als volgt controleren:
shell
python-mpip--help
Als je een uitleg krijgt, is pip beschikbaar. Zo niet, update dan Python.
venv
Er zijn ook meerdere manieren om virtual environments te maken, maar ook hier leer je weer hoe te werken met de aanbevolen en ingebouwde manier: venv. Net als bij pip geldt: als je een recente versie van Python hebt geïnstalleerd, is venv bijgesloten. Controleer dit met:
shell
python-mvenv--help
Als je een uitleg krijgt, is venv beschikbaar. Zo niet, update dan Python.
Als alles werkt, kun je verder met de tutorial.
Virtual environments aanmaken
Een virtual environment maak je aan met venv. Het maakt een afgeschermde omgeving op basis van de Python-versie waarmee je venv aanroept. Als je meerdere Python-versies hebt geïnstalleerd, kun je dus kiezen met welke Python-versie je de omgeving wilt aanmaken. Op mijn laptop heb ik bijvoorbeeld twee versies beschikbaar:
Ik wil met de standaardversie (3.10) een virtual environment maken. Het is mijn gewoonte om de virtual environment aan te maken in mijn projectmap. In mijn shell maak ik eerst een lege projectmap aan, en cd erheen.
shell
cdprojects
mkdirmy-project&&cdmy-project
Vervolgens maak ik een virtual environment aan:
shell
python-mvenv.venv
Ik geef de virtual environment de naam .venv (door de voorlopende punt is het een verborgen map), maar je kunt het elke andere naam geven. Gebruikelijk is wel om het venv of .venv te noemen.
De afgeschermde omgeving is nu gemaakt, maar nog niet actief. Dit is belangrijk. Voer je nu python uit, dan zal het nog steeds de systeembrede Python gebruiken. Om te werken binnen de afgeschermde omgeving, moet je het eerst activeren. Hoe je dit doet is afhankelijk van de shell die je gebruikt:
Ik werk met Linux, dus ziet het er als volgt uit:
shell
source.venv/bin/activate
Je kunt een omgeving weer deactiveren met deactivate.
Packages installeren
Nu je een actieve virtual environment hebt, kun je hierin packages installeren. Omdat je net bent beginnen, zijn er slechts twee packages geïnstalleerd, namelijk pip en setuptools. Deze worden standaard geïnstalleerd door venv.
shell
pip list
Package Version
---------- -------
pip 22.0.2
setuptools 59.6.0
Installeer nu requests en controleer en voer nogmaals pip list uit:
Je ziet dat er naast requests nog een aantal packages zijn geïnstalleerd. Dit komt omdat requests deze heeft aangemerkt als afhankelijkheden. Het installeren van requests zal dus ook deze afhankelijkheden installeren.
Requirements opslaan
Het is handig om de packages die je in je project gebruikt, te noteren zodat ze eenvoudig geïnstalleerd kunnen worden. Dit is handig voor jezelf, als je bijvoorbeeld je virtual environment weggooit en alles opnieuw wilt installeren. Maar het is zeker ook handig als met meerdere personen aan één project werkt, of als je jouw project later wilt publiceren. De gebruikers van je project weten dan welke afhankelijkheden ze moeten installeren.
De standaard manier hiervoor is om je afhankelijkheden op te slaan in requirements.txt. Dit kan eenvoudig met pip:
shell
pipfreeze>requirements.txt
Het resultaat is een tekstbestandje met alle packages (en hun afhankelijkheden) die je hebt geïnstalleerd:
In dit geval zijn alle afhankelijkheden vastgezet op een specifiek versie. Je kunt dit wijzigen, en bijvoorbeeld aangeven dat je requests vanaf versie 2 wilt hebben, maar niet hoger dan versie 3:
requirements.txt
...
requests >=2.0, <3
...
Gooi je nu je virtual environment weg, dan kun je alles eenvoudig opnieuw installeren.
shell
# Verwijder .venv
deactivate
rm-rf.venv
# Maak .venv opnieuw aan en activeer
python-mvenv.venv
source.venv/bin/activate
# Installeer alles opnieuw
pipinstall-rrequirements.txt
Bekijk je nu weer de lijst met geïnstalleerde packages, dan is alles weer aanwezig:
shell
pip list
Package Version
------------------ ----------
certifi 2023.11.17
charset-normalizer 3.3.2
idna 3.6
pip 22.0.2
requests 2.31.0
setuptools 59.6.0
urllib3 2.1.0
Verder lezen
In deze tutorial leerde je de basis van het werken in een virtual environment en packages installeren met pip. Met die basis kun je nu verder, maar er is veel meer mogelijk:
Packages met een specifiek versie installeren
In requirements.txt aangeven dat je alles binnen de major versie wilt installeren
Erwin is de oprichter van python-cursus.nl. In allerlei rollen heeft hij Python ingezet, van het eenvoudiger maken van zijn werk tot het opleveren van complete (web)applicaties. Met vrouw en kinderen woont hij in Havelte (Drenthe), midden in de prachtige natuur. Daar wandelt hij graag, zeker ook omdat de beste ingevingen tijdens een wandeling - weg van de computer - lijken te komen.
Training volgen?
Heb je behoefte aan een in-person training voor jezelf of je team?
Dat kan! Laat je gegevens achter en dan nemen we zo snel mogelijk contact met je op de mogelijkheden te bespreken.
Vragen, opmerkingen?
Heb je vragen, opmerkingen, suggesties of tips naar aanleiding van deze blog?
Neem dan contact met ons op, of laat het weten via
Mastodon of
LinkedIN.