Tæm dit Python kaos med venv før det tæmmer dig

Tæm dit Python kaos med venv før det tæmmer dig

Jeg opdagede virtuelt miljø i Python på den hårde måde. Jeg havde et lille script til at omdøbe billedfiler for en ven, og et andet projekt hvor jeg rodede med et webframework. En dag opdaterede jeg en pakke for at få det ene projekt til at virke, og pludselig væltede det andet. Klassisk. Først da jeg satte mig ned og lærte python venv at kende, holdt det op med at ske.

Hvorfor python venv findes i første omgang

Forestil dig, at du har ét køkken til hele opgangen. Alle bruger de samme krydderier, samme køleskab, samme pander. En skifter saltet ud, en anden fylder chili på sukker-glasset. Det er nogenlunde sådan, det føles at installere Python-pakker globalt.

Problemet uden venv:

  • Du installerer pakker globalt med pip install.
  • Alle dine Python-projekter deler de samme pakker.
  • Når du opdaterer en pakke til projekt A, kan projekt B gå i stykker.
  • Du aner ikke, hvilke versioner et projekt egentlig brugte, når du vender tilbage 6 måneder senere.

Hvad et virtuelt miljø gør:

  • Opretter en lokal kopi af Python og pip inde i dit projekt.
  • Gemmer pakkerne i en mappe ved siden af din kode (typisk venv/).
  • Holder projekter adskilt, så de ikke skubber til hinandens versioner.

Så når nogen spørger: “Hvad er et virtuelt miljø?”, er den korte, jordnære version: en projekt-specifik Python-installation med egne pakker.

De få begreber du skal kende (uden at drukne i teori)

Jeg tager dem lynhurtigt, så du ved, hvad der foregår, når du ser fejl.

Python interpreter

Det er selve Python-programmet. Det, du kører, når du skriver:

python script.py

I et virtuelt miljø får du en egen interpreter inde i projektet, adskilt fra systemets Python.

pip

pip er Pythons pakkehåndtering. Den henter og installerer pakker som requests, django og så videre.

I et aktivt venv er pip bundet til det miljø, så pakkerne lander det rigtige sted.

site-packages

Det er bare mappen, hvor dine installerede pakker ender. I et venv ligger de i noget ala:

venv/lib/python3.11/site-packages/   # macOS/Linux
venv/Lib/site-packages/             # Windows

Du behøver sjældent at åbne mappen, men det er rart at vide, at den findes.

PATH

PATH er miljøvariablen, der bestemmer, hvilke programmer der bliver fundet, når du skriver python eller pip i terminalen.

Når du aktiverer et venv, bliver PATH ændret, så terminalen bruger Python og pip fra venv-mappen i stedet for systemets.

Opret et Python venv trin for trin

Vi tager et helt nyt projekt. Jeg bruger et eksempel, jeg selv ville lave: et lille script der omdøber filer.

1. Opret en projektmappe

mkdir filrenser
cd filrenser

2. Opret virtuelt miljø

Her bruger du Pythons indbyggede venv-modul.

Fælles for alle systemer:

python -m venv venv

Hvis du har både python og python3 liggende, kan det være, du skal skrive:

python3 -m venv venv

Efter kommandoen har kørt, har du en struktur cirka som:

filrenser/
  venv/
    bin/ eller Scripts/
    Lib/
    pyvenv.cfg

Du skal ikke ændre i de filer. Tænk på venv/ som Pythons egen lille maskinrums-mappe.

Aktiver og deaktiver venv (og tjek at du er det rigtige sted)

Der er to ting, jeg altid gør, når jeg arbejder med et projekt:

  • Aktiverer det rigtige venv.
  • Tjekker at det faktisk er aktivt.

Aktivering på Windows (CMD eller PowerShell)

cd filrenser
venvScriptsactivate

Hvis det virker, vil du typisk se noget i denne stil foran prompten:

(venv) C:stitilfilrenser>

Aktivering på macOS / Linux (Terminal)

cd filrenser
source venv/bin/activate

Her vil du typisk se:

(venv) jonas@computer filrenser %

Tjek at du virkelig er i venv

Jeg stoler aldrig kun på prompten. To hurtige checks:

which python      # macOS/Linux
where python      # Windows

Du bør få en sti, der peger ind i din venv-mappe.

Og så:

python -m pip list

På et helt nyt venv vil du kun se de helt basale pakker (pip, setuptools og lignende).

Deaktiver venv igen

Her er det simpelt på alle systemer:

deactivate

Prompten mister (venv), og PATH bliver sat tilbage.

Installer pakker i dit venv og gem dem i requirements.txt

Nu er vi der, hvor ting begynder at ligne rigtigt arbejde.

1. Sørg for at venv er aktivt

Hvis du ikke ser (venv) i prompten, så aktiver igen.

2. Installer en pakke

Eksempel: du vil bruge requests til at hente data fra et API.

python -m pip install requests

Bemærk jeg bruger python -m pip i stedet for bare pip. Det mindsker risikoen for at ramme den forkerte pip-version, hvis din PATH driller.

Tjek at pakken er installeret:

python -m pip list

3. Gem dine pakker i requirements.txt

Her laver vi filen, som gør det let at genskabe miljøet senere (eller dele det med andre):

python -m pip freeze > requirements.txt

Nu ligger der en requirements.txt i din projektmappe med alle pakker og deres versioner. Den fil skal normalt med i dit Git repository.

Hvis du er ny i Python, kan du have glæde af at læse mere om filstruktur og basisprojekter i andre artikler på Coding Class senere.

Genskab miljøet på en ny computer

Forestil dig, at du har klonet dit projekt fra GitHub på en ny maskine. Sådan får du det til at køre igen uden gætterier.

1. Opret nyt venv i projektmappen

python -m venv venv

2. Aktivér venv

  • Windows: venvScriptsactivate
  • macOS/Linux: source venv/bin/activate

3. Installer alle pakker fra requirements.txt

python -m pip install -r requirements.txt

Nu har du samme pakke-setup, som da du sidst gemte filen. Ikke noget med “jeg tror, det var version 1.2 eller 1.3”.

Typiske fejl med python venv (og hvad jeg plejer at gøre)

Her er de fejl, jeg selv møder oftest, enten hos mig selv eller hos andre, der lige er begyndt.

“pip not found” eller “command not found: pip”

Typiske årsager:

  • Venv er ikke aktivt.
  • Du har ikke Python korrekt i PATH.
  • Du bruger systemets pip i stedet for venvs.

Mit standardforsøg:

python -m pip --version

Hvis det virker, så brug python -m pip fremover.

Forkert Python-version i projektet

Måske har du installeret Python 3.12, men projektet blev lavet med 3.10, og en eller anden pakke understøtter ikke den nye endnu.

Tjek hvilken version dit venv bruger:

python --version

Hvis du skal bruge en specifik version, så opret venv med den direkte:

python3.10 -m venv venv

“Permission denied” når du installerer pakker

Hvis du ser fejl, der nævner “permission” eller beder om sudo, er du sandsynligvis ikke i et venv og prøver at skrive i systemets Python-mapper.

Løsning:

  • Tjek at venv er aktivt.
  • Brug python -m pip install ... inde i venv.
  • Undgå sudo pip install til projekter, du selv styrer.

“Module not found” selv om du lige har installeret pakken

Du har kørt pip install noget, men når du kører scriptet, får du:

ModuleNotFoundError: No module named 'noget'

Jeg plejer at tjekke to ting:

  1. Kører jeg scriptet med samme Python, som hører til mit venv?
  2. Installerede jeg pakken i det venv, eller globalt?

Brug de her to linjer:

which python          # eller where python på Windows
python -m pip list

De skal begge pege ind i venv og vise pakken på listen.

Hvornår er python venv nok, og hvornår skal du kigge på Poetry eller uv?

Til langt de fleste små projekter er python venv + requirements.txt rigeligt. Jeg bruger det selv til:

  • Små scripts til filhåndtering.
  • Eksperimenter med pandas eller matplotlib.
  • Små webprojekter med f.eks. Flask.

Men der er situationer, hvor værktøjer som Poetry eller nyere ting som uv begynder at give mening:

Overvej Poetry, hvis:

  • Du laver et bibliotek, der skal udgives på PyPI.
  • Du vil have automatisk håndtering af pyproject.toml, versionsnummer, builds osv.
  • Du vil have én kommandocentral til alt: venv, pakker, scripts.

Overvej uv, hvis:

  • Du vil have meget hurtigere pakkeinstallation.
  • Du arbejder med større projekter med mange afhængigheder.
  • Du er klar på et lidt nyere værktøj og kan leve med, at dokumentation og eksempler stadig udvikler sig.

Hvis du lige er startet med Python, vil jeg klart anbefale at lære det klassiske venv-flow først. Det er også den base, som andre værktøjer bygger ovenpå. Når du er tryg ved python -m venv, aktivering, pip install og requirements.txt, giver det mere mening at kigge videre.

Hvis du vil videre fra her, kan du for eksempel kombinere venv med Git og kigge på versionsstyring. Der har vi også materiale på Coding Class, som viser, hvordan du strukturerer et helt lille Python-projekt fra start til slut.

Jonas Kirkeby har skrevet kode siden han som teenager forsøgte at lave en helt simpel hjemmeside til sin fars lille vvs-firma – og endte med at sidde oppe hele natten for at få en knap til at skifte farve. Siden da har han lært sig det meste ved at prøve sig frem, kopiere andres eksempler, ødelægge dem og langsomt forstå, hvorfor tingene virker, som de gør.

Til daglig arbejder han slet ikke med IT, men bruger aftener og morgener på små projekter: en lille side til en forening, et simpelt værktøj til at holde styr på familiens madplan eller et Python-script, der rydder op i rodede filer. Det er den slags konkrete hverdags-behov, der har formet hans måde at tænke kodning på – hvad kan jeg bygge nu, som faktisk hjælper mig eller nogen, jeg kender?

På Coding Class deler Jonas de guides, han selv ville ønske, han havde haft: korte, konkrete forløb, hvor du kan se noget på skærmen efter få minutters læsning. Han viser hele vejen fra idé til færdig løsning, inklusive de typiske fejl og små snubletråde på vejen, så du ikke kun får den pæne, polerede version.

Hans mål er, at du som begynder eller let øvet hurtigt får følelsen af: “Det her kan jeg faktisk selv finde ud af” – uanset om du vil bygge din første lille hjemmeside, forstå JavaScript-funktioner eller bruge Python til at automatisere en kedelig opgave.

1 kommentar

comments user
Bjørn

Jeg vil altså gemme den til barnebarnets hjemmeside.

Send kommentar

You May Have Missed