Vanaf de Bookworm-release van Raspberry Pi OS op 10 oktober 2023 is het gebruik van Python Virtual Environments (venv) vereist wanneer je met pip packages installeert. Als je sudo pip voor een installatie gebruikt, zal aangegeven worden dat je apt moet gebruiken. Als je een Python-pakket dat niet door Debian is verpakt, wilt installeren, wordt in het meldingsscherm aangegeven een virtuele omgeving aan te maken en het daarbinnen te installeren. Waarom is dit en hoe doe je dit?
Waarom deze verandering?
Deze wijziging is doorgevoerd om de Python-installatie op systeemniveau te beschermen. Dit is geen nieuw probleem. Het gebruik van venv is al lang de aanbevolen oplossing. De Raspberry Pi Foundation is alleen traag geweest om dit op Raspberry Pi-systemen te implementeren.
Het belangrijkste probleem is dit:
Een venv (virtual enviroment) is een gestripte en geïsoleerde kopie van de bestaande Python installatie op de Raspberry Pi. Je hoeft hiervoor niets bijzonders te downloaden.
Wanneer aanvullende Python-modules worden geïnstalleerd met behulp van pip, worden ze geïnstalleerd in de Python-installatie op systeemniveau. Dit kan de installatie op systeemniveau mogelijk verstoren.
Lees het Python Enhancement Proposal (PEP) 668 voor meer details
Bij gebruik van een virtuele omgeving worden de door pip geïnstalleerde pakketten in de virtuele omgeving geplaatst in plaats van op systeemniveau.
Pip versus apt
Er is pip voor het installeren van Python-“dingen”. En er zijn ook apt en apt-get die ook worden gebruikt voor het “installeren van dingen”. Houd er rekening mee dat dit twee totaal afzonderlijke pakketbeheertools zijn.
Pip is specifiek voor Python, terwijl apt en apt-get besturingssysteemtools zijn. Dus hoewel het activeren van een Python venv het gedrag van pip-installaties zal veranderen (ze gaan naar de venv-omgeving), is er geen verandering in het gedrag van apt en apt-get. Het gebruik van apt/apt-get met of zonder actieve venv zal hetzelfde gedrag vertonen.
Venv installeren
Standaard Raspberry Pi OS-sen zouden Python al geïnstalleerd moeten hebben. De venv module zelf kan echter *niet* zijn opgenomen als onderdeel van de OS image samen met de Python installatie. Als je fouten krijgt bij het uitvoeren van de venv setup, dan moet je mogelijk de venv module installeren. Dit doe je met:
sudo apt installeer python3-venv
Basis Venv-gebruik
Dit deel van de tutorial is generiek en behandelt het basisgebruik van virtuele omgevingen. Het is echter Linux-specifiek, aangezien we ons richten op het gebruik van de Raspberry Pi.
De basisstappen zijn:
- Maak de venv aan – dit gebeurt eenmalig (per venv)
- Activeer de venv – dit gebeurt elke keer dat een venv gebruikt moet worden
- Gebruik de venv – voer hier uw Python-code uit
- Deactiveer de venv – optioneel
Maak de venv
Om een nieuwe virtuele omgeving te creëren, gebruik je de venv-module en geef je deze de naam voor de virtuele omgeving.
python3 -m venv voorbeeld
De naam van de virtuele omgeving kan elke geldige naam zijn. Veel tutorials tonen “venv” of “.venv” als naam. Dat is prima, maar het impliceert dat de naam belangrijk is. Dat is het niet. Dus hier kiezen we expres iets simpels: ‘voorbeeld’, om duidelijk te maken dat de naam van de virtuele omgeving gewoon een naam is.
Dus wat deed bovenstaande opdracht? Het creëerde een nieuwe map met de naam van de virtuele omgeving en zette een mapstructuur op die de lay-out nabootste die de Python-interpreter verwacht.
pi@raspberrypi:~ $ python3 -m venv voorbeeld
pi@raspberrypi:~ $ ls
voorbeeld/
pi@raspberrypi:~ $ ls voorbeeld/
bin/ include/ lib/ pyvenv.cfg
pi@raspberrypi:~ $
Activeer de venv
De belangrijkste manier om de virtuele omgeving te gebruiken is door deze te “activeren”. Dit wordt gedaan door het activatie script te “sourcen” dat zich in de bin- map van de virtuele omgeving bevindt.
source voorbeeld/bin/activate
De prompt verandert om de naam van de virtuele omgeving erin op te nemen. Dit helpt om aan te geven dat een venv in gebruik is (actief) en welke.
pi@raspberrypi:~ $ source voorbeeld/bin/activate
(voorbeeld) pi@raspberrypi:~ $
Gebruik de venv
Zodra de virtuele omgeving is geactiveerd, verloopt het gebruik van Python op de normale manier. Het uitvoeren van python of pip wordt gedaan in de context van de virtuele omgeving.
Let op: sudo mag niet worden gebruikt!
Modules die met pip worden geïnstalleerd, worden in de lokale venv-mappen geplaatst. Met ‘pip list‘ vragen we het overzicht van de geïnstalleerde pakketten die in de venv-omgeving geïnstalleerd zijn.
(voorbeeld) pi@raspberrypi:~ $ pip list
Package Version
---------- ----------
pip 23.0.1
setuptool 66.1.1
Als voorbeeld installeren we van https://pypi.org/ het pakket ‘Click‘, de “Command Line Interface Creation Kit”. Click maakt het proces van het schrijven van opdrachtregeltools wat sneller en leuker, meer is het niet.
(voorbeeld) pi@raspberrypi:~ $ pip install click
Looking in indexes: https://pypi.org/simple,
https://www.piwheels.org/simple
Collecting click
Downloading https://www.piwheels.org/simple/click/click-8.1.7-py3-none-any.whl (97 kB)
━━━━━━━━━━━━━━━━━━━━━━━ 97,9/97,9 kB 47,2 kB/s eta 0:00:00
Installing collected packges: click
Succesfully installed click-8.1.7
Opnieuw vragen we het overzicht van de geïnstalleerde pakketten die in de venv-omgeving geïnstalleerd zijn. Je ziet click er nu bij staan.
(voorbeeld) pi@raspberrypi:~ $ pip list
Pakket Version
---------- -------
click 8.1.7
pip 23.0.1
installatietools 66.1.1
(voorbeeld) pi@raspberrypi:~ $
Als je Python uitvoert, heb je toegang tot de met pip-geïnstalleerde modules in de virtuele omgeving van ‘voorbeeld’.
(voorbeeld) pi@raspberrypi:~ $ python
Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import click
>>>
Deactivate the venv
Als je ooit de virtuele omgeving wilt “uitschakelen” en wilt terugkeren naar de normale status, kun je het deactiveringscommando gebruiken.
deactivate
Dit is geen Linux-opdracht . Deze “opdracht” is een shell-functie die in het activatiescript is gedefinieerd toen het oorspronkelijk werd gesourced. Het maakt simpelweg ongedaan wat het activeringsscript deed.
(voorbeeld) pi@raspberrypi:~ $ deactivate
pi@raspberrypi:~ $
Conclusie
Nu ken je de reden waarom je venv moet gebruiken indien je onderdelen binnen Python wilt installeren. Daarnaast hoop ik dat je nu het verschil tussen pip en apt of apt-get begrijpt.
Mocht bovenstaande allemaal duidelijk zijn, dan ben je in staat om de venv aan te maken en te gebruiken alsof er nooit iets veranderd is.
Vind je bovenstaande allemaal te onhandig of begrijp je het nog steeds niet, kun je altijd nog terugschakelen naar een legacy-OS van voor ‘Bookworm’.
Identificeren van je Raspberry Pi OS doe je met:
lsb_release –a
Have A Nice Day!
Laat een reactie achter