Werken met pip en venv

Werken met pip en venv

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 -m pip --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 -m venv --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:

shell
python --version  # 3.10.12
python3.12  --version  # 3.12.1

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
cd projects
mkdir my-project && cd my-project

Vervolgens maak ik een virtual environment aan:

shell
python -m venv .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:

Activeer venv

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:

shell
pip install requests

...

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

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
pip freeze > requirements.txt

Het resultaat is een tekstbestandje met alle packages (en hun afhankelijkheden) die je hebt geïnstalleerd:

requirements.txt
certifi==2023.11.17
charset-normalizer==3.3.2
idna==3.6
requests==2.31.0
urllib3==2.1.0

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 -m venv .venv
source .venv/bin/activate

# Installeer alles opnieuw
pip install -r requirements.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
  • Geïnstalleerde packages upgraden met pip
  • Packages verwijderen
  • ...

De documentatie van pip is uitgebreid en goed leesbaar. Voor het aangeven van welke versie je wilt installeren, lees je deze paragraaf op packaging.python.org. Voor het werken met venv lees je de documentatie van python.

Over de auteur


Erwin Matijsen

Erwin Matijsen

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.



Contact

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.