Python venv CheatSheet

een aantal handige venv-commands

Inhoud

Venv is een virtuele omgevingsbeheer commandline tool. Een veel eenvoudigere optie vergeleken met Anaconda. Hier zijn enkele nuttige venv commando’s.

Een python probeert een houten doos open te maken.

Alleen voor jou om te weten dat er, naar mijn mening, een veel betere tool is voor het beheer van pakketten en omgevingen in Python dan venv - uv. Kijk hier eens naar: uv - Nieuwe Python Pakket, Project en Omgevingsbeheer

Python venv Cheat Sheet

Een virtuele omgeving aanmaken

  • Standaard commando (Python 3.3+):

    python -m venv venv
    

    Dit maakt een virtuele omgeving genaamd venv in je huidige directory.

  • Met een specifieke Python versie (als geïnstalleerd):

    python3.10 -m venv venv
    

    of met behulp van virtualenv:

    virtualenv -p /usr/local/bin/python3.10 venv
    

    (Vereist het virtualenv pakket).

De virtuele omgeving activeren

  • Op Windows:
    .\venv\Scripts\activate
    
  • Op macOS/Linux:
    source venv/bin/activate
    
    De shell prompt moet nu de naam van de omgeving tonen.

De virtuele omgeving deactiveren

  • Op alle platforms:
    deactivate
    
    Dit brengt je terug naar je systeem Python.

Pakketten installeren

  • Met pip:
    pip install
    
    Voorbeeld:
    pip install numpy pandas
    
  • Pip upgraden (aangeraden):
    python -m pip install --upgrade pip
    

Vergrendelen en exporteren van vereisten

  • Huidige omgevingspakketten opslaan:
    pip freeze > requirements.txt
    
  • Installeren vanuit een vereistenbestand:
    pip install -r requirements.txt
    
    Zorg ervoor dat je virtuele omgeving geactiveerd is voordat je deze commando’s uitvoert.

Een virtuele omgeving verwijderen

deactivate
rm -rf <env path>

Algemene valkuilen bij het beheren van Python virtuele omgevingen

Het vergeten om de virtuele omgeving te activeren

  • Een veelvoorkomende fout is het uitvoeren van commando’s zonder de bedoelde virtuele omgeving te activeren, wat leidt tot het installeren van pakketten in de globale omgeving of de verkeerde venv. Dit kan leiden tot afhankelijkheidsconflicten en onvoorspelbaar gedrag.

Niet vastleggen van pakketversies

  • Het gebruik van losse versiespecificeerders (zoals >= in plaats van ==) in requirements.txt ondermijnt herhaalbaarheid. Exacte versievastlegging zorgt ervoor dat iedereen die aan het project werkt dezelfde pakketversies gebruikt, waardoor onverwachte problemen tijdens implementatie of samenwerking worden voorkomen.

Het mixen van globale en virtuele omgevingen

  • Accidentslijk installeren van pakketten globaal of het mixen van globale en virtuele omgevingen kan conflicten veroorzaken, vooral als verschillende projecten onverenigbare pakketversies vereisen. Zorg altijd dat je binnen de juiste omgeving werkt.

Het committen van virtuele omgevingen naar versiebeheer

  • Het opnemen van de virtuele omgevingsdirectory (bijvoorbeeld venv/) in versiebeheer vergroot repositories en is overbodig. Voeg altijd venv directories toe aan .gitignore om je repository schoon te houden.

Het negeren van het scheiden van ontwikkeling en productieafhankelijkheden

  • Het falen om ontwikkeling en productieafhankelijkheden te onderscheiden kan leiden tot overbelaste of onveilige implementaties. Gebruik aparte vereistenbestanden of configuratiestukken voor elk.

Gebrek aan documentatie en automatisering

  • Niet documenteren van omgevingsinstellingen of het falen om het proces te automatiseren (met scripts of Makefiles) maakt het onboarding van nieuwe bijdragers en het reproduceren van omgevingen moeilijker.

Het niet regelmatig opruimen van oude omgevingen

  • Tijdens de loop van de tijd kunnen ongebruikte virtuele omgevingen zich ophopen, wat schijfopslag verspilt en verwarring veroorzaakt. Ruim regelmatig verouderde venvs op om een nette werkplek te behouden.

Het negeren van grenzen van systeem Python en pakketbeheer

  • Het wijzigen van de systeem Python of het mixen van systeempakketbeheer met pip kan systeemtools beschadigen en moeilijk te diagnosticeren problemen veroorzaken. Gebruik altijd venvs voor projectafhankelijkheden en vermijd het storen van systeembeheerde pakketten.

Samenvattingstabel

Valkuil Impact
Het vergeten om venv te activeren Installeert pakketten in de verkeerde omgeving
Niet vastleggen van pakketversies Onvoorspelbare builds, moeilijk reproduceren
Het mixen van globale en virtuele omgevingen Afhankelijkheidsverschillen
Het committen van venv directories naar versiebeheer Overbelaste, onoverzichtelijke repositories
Niet scheiden van ontwikkeling en productieafhankelijkheden Overbelaste/onveilige productieomgevingen
Gebrek aan documentatie/automatisering Moeilijk onboarding, onconsistente instellingen
Niet opruimen van oude omgevingen Schijfopslagverspilling, verwarring
Wijzigen van systeem Python of pakketten Systeeminstabiliteit, gebroken tools

Het volgen van best practices, zoals altijd je venv activeren, afhankelijkheden vastleggen, omgevingen scheiden en duidelijke documentatie onderhouden, kan je helpen om deze veelvoorkomende valkuilen te vermijden.

Belangrijkste verschillen tussen Conda en virtuele omgevingen voor herhaalbaarheid

Kenmerk Conda omgevingen Python virtuele omgevingen (venv/virtualenv)
Bereik van beheer Beheert Python pakketten en niet-Python afhankelijkheden (bijvoorbeeld systeembibliotheken, compilers) Beheert alleen Python pakketten via pip
Beheer van Python-versie Kan elke Python-versie per omgeving specificeren en installeren Gebruikt de systeemgeïnstalleerde Python-versie
Kruisplatform consistentie Meer consistent over verschillende OS (Windows, macOS, Linux) vanwege het beheren van alle afhankelijkheden Relieert op systeembibliotheken, die kunnen variëren per OS
Pakketbronnen Gebruikt Conda-repositories (vooraf gecompileerde binaire bestanden, wetenschappelijke stack) Gebruikt PyPI (pip) voor Python-pakketten
Herhaalbaarheid Hoger voor complexe, wetenschappelijke of gemengde taalprojecten; kan volledige omgeving exporteren (conda env export) Goed voor zuivere Python-projecten; kan herhaalbaarheid missen als systeemafhankelijkheden betrokken zijn
Niet-Python afhankelijkheden Kan installeren en beheren (bijvoorbeeld OpenBLAS, libpng) Kan niet beheren; moeten apart geïnstalleerd worden
Omgevingsexport/import conda env export / conda env create voor volledige herhaalbaarheid pip freeze > requirements.txt / pip install -r requirements.txt (Alleen Python-pakketten)
Prestaties Snel en betrouwbaarder voor grote wetenschappelijke pakketten (bijvoorbeeld numpy, pandas) Kan vereisen om vanuit bron te compileren, vooral op Windows
Complexiteit Slight hogere opzet- en beheeroverhead Leger, geschikt voor basis Python-projecten

Samenvatting van belangrijke punten

  • Conda-omgevingen zijn ideaal voor herhaalbaarheid in projecten die zowel Python- als niet-Python-afhankelijkheden vereisen, of wanneer exacte replicatie over platforms kritisch is. Conda beheert de hele stack - inclusief Python zelf, bibliotheken en zelfs compilers - waardoor het makkelijker is om complexe omgevingen te delen en te reproduceren, vooral in data science en onderzoek contexten.

  • Python virtuele omgevingen (venv/virtualenv) zijn lichtgewicht en uitstekend voor het isoleren van Python-afhankelijkheden in zuivere Python-projecten. Echter, ze beheren geen systeemniveau- of niet-Python-afhankelijkheden, dus herhaalbaarheid kan worden ondermijnd als je project afhankelijk is van externe bibliotheken of specifieke systeemconfiguraties.

  • Exporteren en delen van omgevingen: Conda laat je een volledige omgevingsspecificatie exporteren (conda env export), inclusief alle afhankelijkheden en hun versies, die exact elders kunnen worden gereproduceerd. Met virtuele omgevingen, pip freeze vangt alleen Python-pakketten, niet systeemafhankelijkheden of de Python-interpreterversie.

  • Conclusie
    Gebruik Conda voor maximale herhaalbaarheid in wetenschappelijke, kruisplatform of complexere projecten. Gebruik Python virtuele omgevingen voor lichtgewicht, zuivere Python-projecten waar systeemafhankelijkheden geen probleem zijn.