Zo kun je programmeren in Python - Deel 9

© PXimport

Zo kun je programmeren in Python - Deel 9

Geplaatst: 10 maart 2021 - 07:02

Aangepast: 13 oktober 2023 - 15:59

Koen Vervloesem

Je kunt nu al goed overweg met allerlei aspecten van Python, maar naast de standaardbibliotheek van Python bestaan er nog heel wat extra modules. In deze les leer je hoe je deze installeert en hoe je met virtuele omgevingen werkt om met conflicterende vereisten van modules om te gaan.

Basisfunctionaliteit die bijna iedereen nodig heeft, zit in de standaardbibliotheek van Python. In les 6 zag je al hoe je toegang tot deze functionaliteit krijgt met de opdracht import en toonden we je kort enkele standaardmodules. Maar in die les schreef je ook je eigen module. Deze les gaat volledig over het installeren van extra modules die anderen geschreven hebben.

Pakketten vinden op PyPI

Iedereen kan zelf een Python-module maken, zoals je in les 6 zelf ook hebt gedaan. Python biedt een centrale repository aan met modules die je eenvoudig kunt installeren en in je eigen Python-programma’s kunt gebruiken: de Python Package Index of afgekort PyPI. Je vindt ze op de website www.pypi.org.

PyPI bevat meer dan 170.000 projecten, die pakketten worden genoemd. Een pakket bevat één of meerdere Python-modules. Je zoekt op de website van PyPI op trefwoorden om pakketten te vinden die je in je code kunt gebruiken. Maar het kan nog eenvoudiger op de opdrachtregel van je besturingssysteem met het programma pip3, dat deel uitmaakt van Python. Zo zoek je met de volgende opdracht naar pakketten:

pip3 search <zoekterm>

Je krijgt dan een lijst te zien met pakketnamen en een korte beschrijving van één regel waarin je zoekterm voorkomt. Wil je meer informatie over het pakket lezen, dan zul je de pagina voor het pakket op de website van PyPI moeten raadplegen, waar een uitgebreidere beschrijving staat, inclusief een link naar de website van het pakket.

Een pakket installeren met pip3

Heb je eenmaal een pakket gevonden dat je wilt gebruiken, dan installeer je het ook eenvoudig met pip3:

pip3 install urllib3

Na de installatie van een pakket kun je meer informatie over het pakket opvragen met:

pip3 show urllib3

Naast de korte beschrijving en het versienummer van het geïnstalleerde pakket, krijg je ook de website en de licentie te zien.

Geïnstalleerde module in je Python-code gebruiken

Nadat je een pakket geïnstalleerd hebt met pip3, kun je de modules erin gebruiken, net zoals de standaardmodules van Python. Voor het voorbeeld van urllib3:

>>> import urllib3

>>> http = urllib3.PoolManager()

>>> r = http.request('GET', 'http://reshift.nl/robots.txt')

>>> r.status

200

>>> r.data

b'User-agent: *\nDisallow: /wp-admin/\nAllow: /wp-admin/admin-ajax.php\n'

Na de installatie van een pakket maakt het dus niet meer uit of de module in de standaardbibliotheek zit of niet. Voordat je een module in je eigen code gebruikt, dien je wel na te kijken wat de licentie van het project je toelaat. Maar omdat de meeste Python-pakketten een opensource-licentie gebruiken, zal het gebruik niet snel problematisch zijn.

Het nut van virtuele omgevingen

Als je veel Python-pakketten installeert met pip3, kom je wellicht een keer in de problemen. Pakketten importeren immers ook andere pakketten die ze gebruiken, die noemen we ‘afhankelijkheden’. Maar misschien installeert pakket A versie 1.0 van pakket Z en installeert pakket B de met versie 1.0 incompatibele versie 2.0 van pakket Z. Het gevolg? Na de installatie van pakket B werkt pakket A niet meer, want je kunt maar één versie van een Python-pakket installeren.

Gelukkig heeft Python voor deze problemen een oplossing: virtuele omgevingen. Een virtuele omgeving is een directory op je computer waarin je Python-pakketten installeert in de plaats van in je globale Python-pakketdirectory. Deze virtuele omgeving is volledig gescheiden van andere virtuele omgevingen en van de globale Python-pakketdirectory. Als je dan voor elk Python-project dat je wilt installeren of ontwikkelen een nieuwe virtuele omgeving aanmaakt, ben je zeker dat je door de installatie van de pakketten die je nodig hebt geen van je andere projecten doet falen.

Virtuele omgeving opzetten met venv

Een virtuele omgeving opzetten, doe je in Python met de module venv:

python3 -m venv C:\pad\naar\mijnomgeving

Dit maakt de opgegeven directory (en eventuele bovenliggende directory’s die nog niet bestaan) en maakt verwijzingen naar de Python-interpreter en een lege directory voor pakketten.

Om nu de virtuele omgeving te gebruiken, moet je ze eerst ‘activeren’. Dat doe je als volgt:

C:\pad\naar\mijnomgeving\Scripts\activate.bat

Als je nu met pip3 pakketten installeert, worden ze in de virtuele omgeving geïnstalleerd en niet in je globale Python-pakketbibliotheek. De virtuele omgeving verlaten doe je met de opdracht deactivate. Je werkt dan weer in je globale Python-omgeving. Je kunt nu een andere virtuele omgeving opzetten of een virtuele omgeving die je al hebt aangemaakt activeren. Zo schakel je eenvoudig tussen verschillende projecten over zonder dat de installatie van Python-pakketten in de ene omgeving een impact heeft op een andere omgeving.

Virtuele omgeving in macOS en Linux

Afhankelijkheden opslaan en opnieuw installeren

Als je project veel afhankelijkheden gebruikt en je die allemaal in een virtuele omgeving hebt geïnstalleerd met pip3, wil je natuurlijk dat iemand anders die je code draait zo eenvoudig mogelijk al die pakketten kan installeren. Gelukkig kun je eenvoudig een lijst aanmaken met alle in de virtuele omgeving geïnstalleerde pakketten en hun versies:

pip3 freeze > requirements.txt

Het bestand requirements.txt bevat dan voor elk geïnstalleerd pakket in de virtuele omgeving een regel:

pakketnaam==versienummer

Daarna kan de andere gebruiker op zijn computer een virtuele omgeving aanmaken en je Python-code daarin kopiëren. Die code zal nog niet werken, want de afhankelijkheden zijn nog niet geïnstalleerd. Maar als je het bestand requirements.txt samen met je code verspreidt, hoeft de gebruiker maar één opdracht uit te voeren in de virtuele omgeving om alle afhankelijkheden te installeren:

pip3 install -r requirements.txt

Daarna ben je zeker dat jouw code ook op de andere computers werkt, tenminste als ook jullie Python-versies hetzelfde zijn. De afhankelijkheden zijn immers hetzelfde en van dezelfde versies.

Als je de versienummers van je afhankelijkheden niet wilt vastleggen, kun je deze in het bestand requirements.txt weglaten, samen met de aanduiding ==. Je vermeldt dan alleen de pakketnamen. Deze opdracht installeert dan de nieuwste versie van de opgegeven pakketten:

pip3 install -r requirements.txt

Samenvatting

In deze les heb je geleerd hoe je extra pakketten opzoekt in de Python Package Index en hoe je ze installeert met pip3. Je leerde ook met virtuele omgevingen werken en de afhankelijkheden van je projecten opslaan, zodat je ze later eenvoudig weer kunt installeren in een nieuwe virtuele omgeving. Hiermee komen we bijna aan het einde van onze lessenreeks voor beginners. In de laatste les gaan we een volledig Python-script ontwikkelen dat je op de opdrachtregel kunt uitvoeren.

Opdracht

Uitwerking

Cheatsheet

Deel dit artikel
Voeg toe aan favorieten