{"id":13751,"date":"2024-12-08T08:35:46","date_gmt":"2024-12-08T07:35:46","guid":{"rendered":"https:\/\/www.picademie.nl\/?p=13751"},"modified":"2025-01-06T14:12:44","modified_gmt":"2025-01-06T13:12:44","slug":"venv-de-virtuele-python-omgeving","status":"publish","type":"post","link":"https:\/\/www.picademie.nl\/index.php\/2024\/12\/08\/venv-de-virtuele-python-omgeving\/","title":{"rendered":"Venv, de virtuele Python-omgeving"},"content":{"rendered":"\n<pre class=\"wp-block-preformatted\">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?<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"636\" height=\"360\" src=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2024\/12\/venv_melding.png\" alt=\"\" class=\"wp-image-13754\" srcset=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2024\/12\/venv_melding.png 636w, https:\/\/www.picademie.nl\/wp-content\/uploads\/2024\/12\/venv_melding-300x170.png 300w\" sizes=\"auto, (max-width: 636px) 100vw, 636px\" \/><figcaption class=\"wp-element-caption\">Het bekende advies-\/meldingsscherm als je sudo en pip combineert bij het installeren van Python modules<\/figcaption><\/figure>\n\n\n\n<p><strong>Waarom deze verandering?<\/strong><\/p>\n\n\n\n<p>Deze wijziging is doorgevoerd om de Python-installatie op systeemniveau te beschermen. Dit is geen nieuw probleem. Het gebruik van <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">venv<\/mark> is al lang de aanbevolen oplossing. De Raspberry Pi Foundation is alleen traag geweest om dit op Raspberry Pi-systemen te implementeren.<\/p>\n\n\n\n<p><strong>Het belangrijkste probleem is dit:<\/strong><\/p>\n\n\n\n<p><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-black-color\">Een venv (virtual enviroment) is een gestripte en ge\u00efsoleerde kopie van de bestaande Python installatie op de Raspberry Pi. Je hoeft hiervoor niets bijzonders te downloaden.<\/mark><\/p>\n\n\n\n<p>Wanneer aanvullende Python-modules worden ge\u00efnstalleerd met behulp van&nbsp;<strong>pip<\/strong>, worden ze ge\u00efnstalleerd in de Python-installatie op systeemniveau. Dit kan de installatie op systeemniveau mogelijk verstoren.<\/p>\n\n\n\n<p><a href=\"https:\/\/peps.python.org\/pep-0668\/\">Lees het <strong>Python Enhancement Proposal<\/strong> (PEP) 668 voor meer details<\/a><\/p>\n\n\n\n<p>Bij gebruik van een virtuele omgeving worden de door pip ge\u00efnstalleerde pakketten in de virtuele omgeving geplaatst in plaats van op systeemniveau.<\/p>\n\n\n\n<p><strong>Pip versus apt<\/strong><\/p>\n\n\n\n<p>Er is <strong>pip<\/strong> voor het installeren van Python-&#8220;dingen&#8221;. En er zijn ook <strong>apt<\/strong> en <strong>apt-get<\/strong> die ook worden gebruikt voor het &#8220;installeren van dingen&#8221;. Houd er rekening mee dat dit twee totaal afzonderlijke pakketbeheertools zijn.<\/p>\n\n\n\n<p><strong>Pip <\/strong>is specifiek voor Python, terwijl <strong>apt <\/strong>en <strong>apt-get<\/strong> 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.<\/p>\n\n\n\n<p><strong>Venv installeren<\/strong><\/p>\n\n\n\n<p>Standaard Raspberry Pi OS-sen zouden Python al ge\u00efnstalleerd 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:<\/p>\n\n\n\n<p><kbd>sudo apt installeer python3-venv<\/kbd><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Basis Venv-gebruik<\/strong><\/h2>\n\n\n\n<p>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.<\/p>\n\n\n\n<p>De basisstappen zijn:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Maak&nbsp;<\/strong>de venv aan &#8211; dit gebeurt eenmalig (per venv)<\/li>\n\n\n\n<li><strong>Activeer&nbsp;<\/strong>de venv &#8211; dit gebeurt elke keer dat een venv gebruikt moet worden<\/li>\n\n\n\n<li><strong>Gebruik&nbsp;<\/strong>de venv &#8211; voer hier uw Python-code uit<\/li>\n\n\n\n<li><strong>Deactiveer&nbsp;<\/strong>de venv &#8211; optioneel<\/li>\n<\/ul>\n\n\n\n<p><strong>Maak de venv<\/strong><\/p>\n\n\n\n<p>Om een \u200b\u200bnieuwe virtuele omgeving te cre\u00ebren, gebruik je de&nbsp;<a href=\"https:\/\/docs.python.org\/3\/library\/venv.html\">venv<\/a>-module en geef je deze de naam voor de virtuele omgeving.<\/p>\n\n\n\n<p><kbd>python3 -m venv voorbeeld<\/kbd><\/p>\n\n\n\n<p>De naam van de virtuele omgeving kan elke geldige naam zijn. Veel tutorials tonen &#8220;venv&#8221; of &#8220;.venv&#8221; als naam. Dat is prima, maar het impliceert dat de naam belangrijk is. Dat is het niet. Dus hier kiezen we expres iets simpels: &#8216;voorbeeld&#8217;, om duidelijk te maken dat de naam van de virtuele omgeving gewoon een naam is.<\/p>\n\n\n\n<p>Dus wat deed bovenstaande opdracht? Het cre\u00eberde 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.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pi@raspberrypi:~ $ python3 -m venv voorbeeld \npi@raspberrypi:~ $ ls \nvoorbeeld\/ \npi@raspberrypi:~ $ ls voorbeeld\/ \nbin\/ include\/ lib\/ pyvenv.cfg \npi@raspberrypi:~ $\n<\/code><\/pre>\n\n\n\n<p><strong>Activeer de venv<\/strong><\/p>\n\n\n\n<p>De belangrijkste manier om de virtuele omgeving te gebruiken is door deze te &#8220;activeren&#8221;. Dit wordt gedaan door het&nbsp;activatie script te &#8220;sourcen&#8221; dat zich in de&nbsp;<strong>bin-<\/strong>&nbsp;map van de virtuele omgeving bevindt.<\/p>\n\n\n\n<p><kbd>source voorbeeld\/bin\/activate<\/kbd><\/p>\n\n\n\n<p>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.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pi@raspberrypi:~ $ source voorbeeld\/bin\/activate\n(voorbeeld) pi@raspberrypi:~ $<\/code><\/pre>\n\n\n\n<p><strong>Gebruik de venv<\/strong><\/p>\n\n\n\n<p>Zodra de virtuele omgeving is geactiveerd, verloopt het gebruik van Python op de normale manier. Het uitvoeren van&nbsp;python of&nbsp;pip wordt gedaan in de context van de virtuele omgeving.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Let op: sudo mag niet worden gebruikt!<\/mark><\/strong><\/h3>\n\n\n\n<p>Modules die met pip worden ge\u00efnstalleerd, worden in de lokale venv-mappen geplaatst.&nbsp;Met &#8216;<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">pip list<\/mark>&#8216; vragen we het overzicht van de ge\u00efnstalleerde pakketten die in de venv-omgeving ge\u00efnstalleerd zijn.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>(voorbeeld) pi@raspberrypi:~ $ pip list\nPackage            Version\n----------         ----------\npip                23.0.1\nsetuptool          66.1.1\n<\/code><\/pre>\n\n\n\n<p>Als voorbeeld installeren we van <a href=\"https:\/\/pypi.org\/\">https:\/\/pypi.org\/<\/a> het pakket &#8216;<a href=\"https:\/\/pypi.org\/project\/click\/\">Click<\/a>&#8216;, de &#8220;Command Line Interface Creation Kit&#8221;. Click maakt het proces van het schrijven van opdrachtregeltools wat sneller en leuker, meer is het niet.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>(voorbeeld) pi@raspberrypi:~ $ pip install click\nLooking in indexes: https:\/\/pypi.org\/simple, \nhttps:&#47;&#47;www.piwheels.org\/simple\nCollecting click\n  Downloading https:\/\/www.piwheels.org\/simple\/click\/click-8.1.7-py3-none-any.whl (97 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 97,9\/97,9 kB 47,2 kB\/s eta 0:00:00\nInstalling collected packges: click\nSuccesfully installed click-8.1.7\n<\/code><\/pre>\n\n\n\n<p>Opnieuw vragen we het overzicht van de ge\u00efnstalleerde pakketten die in de venv-omgeving ge\u00efnstalleerd zijn. Je ziet <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">click <\/mark>er nu bij staan.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>(voorbeeld) pi@raspberrypi:~ $ pip list\nPakket              Version\n----------          -------\nclick               8.1.7\npip                 23.0.1\ninstallatietools    66.1.1 \n\n(voorbeeld) pi@raspberrypi:~ $<\/code><\/pre>\n\n\n\n<p>Als je Python uitvoert, heb je toegang tot de met pip-ge\u00efnstalleerde modules in de virtuele omgeving van &#8216;voorbeeld&#8217;.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>(voorbeeld) pi@raspberrypi:~ $ python\nPython 3.11.2 (main, Mar 13 2023, 12:18:29) &#91;GCC 12.2.0] on linux\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n&gt;&gt;&gt; import click\n&gt;&gt;&gt;\n<\/code><\/pre>\n\n\n\n<p><strong>Deactivate the venv<\/strong><\/p>\n\n\n\n<p>Als je ooit de virtuele omgeving wilt &#8220;uitschakelen&#8221; en wilt terugkeren naar de <strong>normale status<\/strong>, kun je het deactiveringscommando gebruiken.<\/p>\n\n\n\n<p><kbd>deactivate<\/kbd><\/p>\n\n\n\n<p>Dit is&nbsp;<u>geen<\/u>&nbsp;Linux-opdracht&nbsp;. Deze &#8220;opdracht&#8221; is een shell-functie die in het&nbsp;activatiescript is gedefinieerd toen het oorspronkelijk werd gesourced. Het maakt simpelweg ongedaan wat het activeringsscript deed.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>(voorbeeld) pi@raspberrypi:~ $ deactivate\npi@raspberrypi:~ $<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusie<\/h2>\n\n\n\n<p>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. <\/p>\n\n\n\n<p>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.<\/p>\n\n\n\n<p>Vind je bovenstaande allemaal te onhandig of begrijp je het nog steeds niet, kun je altijd nog terugschakelen naar een legacy-OS van voor &#8216;Bookworm&#8217;.<\/p>\n\n\n\n<p>Identificeren van je Raspberry Pi OS doe je met:<\/p>\n\n\n\n<p><kbd>lsb_release \u2013a<\/kbd><\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"725\" height=\"227\" src=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2024\/12\/image-13.png\" alt=\"\" class=\"wp-image-13768\" style=\"width:408px;height:auto\" srcset=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2024\/12\/image-13.png 725w, https:\/\/www.picademie.nl\/wp-content\/uploads\/2024\/12\/image-13-300x94.png 300w\" sizes=\"auto, (max-width: 725px) 100vw, 725px\" \/><\/figure>\n\n\n\n<p><em>Have A Nice Day!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>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 <a class=\"mh-excerpt-more\" href=\"https:\/\/www.picademie.nl\/index.php\/2024\/12\/08\/venv-de-virtuele-python-omgeving\/\" title=\"Venv, de virtuele Python-omgeving\">[&#8230;]<\/a><\/p>\n<\/div>","protected":false},"author":1,"featured_media":13758,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[728],"tags":[],"class_list":["post-13751","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handy-stuff"],"jetpack_featured_media_url":"https:\/\/www.picademie.nl\/wp-content\/uploads\/2024\/12\/Venv.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/posts\/13751","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/comments?post=13751"}],"version-history":[{"count":0,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/posts\/13751\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/media\/13758"}],"wp:attachment":[{"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/media?parent=13751"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/categories?post=13751"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/tags?post=13751"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}