0%

Geïsoleerde omgevingen en pakketten · oefening

Schrijf op wat het project nodig heeft

De omgeving werkt nu, maar het project heeft nog niet vastgelegd waarom. Als .venv verdwijnt, verdwijnt de lijst geïnstalleerde pakketten mee.

Een pakket dat je project nodig heeft om te draaien heet een afhankelijkheid, of dependency: je code is ervan afhankelijk dat het aanwezig is. Je project heeft er tot nu toe precies één: requests, in de exacte versie van dit hoofdstuk. Schrijf die belofte in een gewoon tekstbestand:

nano requirements.txt
cat requirements.txt

Typ in nano requests==2.34.2, sla op met Ctrl + O en sluit af met Ctrl + X. cat toont daarna het opgeslagen bestand.

Je zou één regel moeten zien:

requests==2.34.2

De bestandsnaam requirements.txt is een conventie die pip en mensen die aan Python-projecten werken begrijpen. Elke regel die geen commentaar is noemt een vereiste. Deze noemt zowel het pakket als de exacte versie.

Rechtstreeks is anders dan ondersteunend

Toen pip requests installeerde, installeerde het ook pakketten zoals certifi, charset-normalizer, idna en urllib3. Dat zijn transitieve afhankelijkheden: pakketten die je rechtstreekse afhankelijkheid nodig heeft om zijn werk te doen.

Kopieer in deze oefening niet die hele geïnstalleerde plank. Het project heeft één keuze gemaakt: requests==2.34.2. pip kan de eigen metadata van dat pakket lezen en de geverifieerde ondersteunende versies uit de ingestelde index kiezen. Door alleen de rechtstreekse afhankelijkheid in het kleine bestand te zetten, blijft de bedoeling van het project zichtbaar.

Er zijn projecten die voor deployment ook elk transitief onderdeel vastzetten. De mirror van Python Land doet dat zelf voor reproduceerbaarheid en beoordeling van de softwaretoeleveringsketen. Die vastgezette platformverzameling lost een ander probleem op dan het requirements-bestand van dit kleine beginnersproject.

Waarom dit bestand blijft en .venv niet

requirements.txt is kleine, overdraagbare tekst die je zelf schrijft. Het hoort bij het project en wordt met het hoofdstuk opgeslagen. .venv is grote, computerspecifieke uitvoer die door hulpmiddelen is gemaakt. Daarom sluit Python Land die bewust uit van de opgeslagen sessie en van downloads.

De regel is eenvoudig: bewaar het recept en bouw het resultaat opnieuw op.

Nu jij

Open requirements.txt met nano en voeg exact deze rechtstreekse vereiste toe:

requests==2.34.2

Commentaar en lege regels zijn prima. Voeg geen ondersteunende pakketten van requests, pytest of uv toe. Ze zijn beschikbaar op de site, maar dit project heeft ze niet als runtime-afhankelijkheden gekozen.

Voer cat requirements.txt uit om het blijvende bestand te bekijken. Druk daarna op Check my work. De beoordeling leest het resulterende bestand en kan en zal niet bewijzen welke shellopdracht je gebruikte.

Waarom noemt requirements.txt alleen requests en niet certifi, idna en urllib3?