Online zetten: de lijst van je packages
Hier bouw je op verder: Een commit maken en Je project naar GitHub pushen
Weet je dit niet meer zeker? Lees het terug voordat je verdergaat.
- VS Code & Git Een commit maken
- VS Code & Git Je project naar GitHub pushen
Je project draait op je laptop omdat je daar ooit fastapi[standard], sqlitedict en misschien argon2-cffi en slowapi hebt geïnstalleerd. Een andere computer weet daar niets van. Hij krijgt je code uit git, en .venv zit daar bewust niet in.
Daarom zet je in een bestand welke packages je project nodig heeft. Dat bestand heet bij afspraak requirements.txt, en het staat naast main.py.
De lijst maken
Open je project in VS Code, en typ in de terminal van VS Code (waar je virtual environment aanstaat):
python -m pip freeze | Out-File -Encoding ascii requirements.txt
python -m pip freeze schrijft elk package in je virtual environment op, met de precieze versie. De pipe | geeft die lijst door aan Out-File, dat hem in een bestand zet; de pipe ken je uit Zoeken en doorgeven in de Linux-cursus. In Linux zou je > gebruiken, maar in de PowerShell van Windows schrijft > een bestand dat git en Linux niet als gewone tekst lezen. -Encoding ascii maakt er gewone tekst van. Open requirements.txt:
annotated-types==0.7.0
anyio==4.11.0
argon2-cffi==25.1.0
...
fastapi==0.142.0
...
sqlitedict==2.1.0
...
Jouw versies zijn waarschijnlijk anders, en de lijst is langer dan je verwacht: ook de packages die FastAPI zelf weer nodig heeft, staan erin. Dat is goed. Zo krijgt de server precies wat bij jou werkt, en niet een nieuwere versie die net iets anders doet.
In git
requirements.txt hoort in git: het is een deel van je project, net als main.py. Er staat niets geheims in.
git add requirements.txt
git commit -m "requirements.txt toegevoegd"
git push
Installeer je later een nieuw package, maak de lijst dan opnieuw en commit hem mee. Anders werkt je site op je laptop wel en op de server niet. Hoe een andere computer de lijst gebruikt, zie je in les 6.
Er gaat iets mis
De lijst is leeg
requirements.txt is leeg, of er staan maar een paar regels in, zonder fastapi.
Oorzaak: je typte het commando in een terminal waar je virtual environment niet aanstaat. Dan schrijft python -m pip freeze de packages van je gewone Python op, en daar staat bijna niets.
Oplossing: open de terminal in VS Code na code . in je projectmap; daar zet de Python-extensie de virtual environment aan. Je ziet (.venv) voor de prompt staan. Maak de lijst opnieuw.
Een binair bestand op GitHub
GitHub zegt bij requirements.txt dat het een binair bestand is, en cat requirements.txt in Linux toont rommel tussen de letters.
Oorzaak: je maakte de lijst met > in de PowerShell van Windows. Die schrijft UTF-16, een vorm van tekst die git en Linux niet als gewone tekst herkennen.
Oplossing: maak de lijst opnieuw met Out-File, en commit hem opnieuw.
# FOUT
python -m pip freeze > requirements.txt
# GOED
python -m pip freeze | Out-File -Encoding ascii requirements.txt
Een pad in plaats van een versie
sqlitedict @ file:///C:/Users/sam/Downloads/sqlitedict-2.1.0.tar.gz
Oorzaak: je installeerde dat package ooit uit een bestand op je laptop. De server heeft dat bestand niet.
Oplossing: verander de regel in een naam met versie, zoals sqlitedict==2.1.0.
Een package dat alleen op Windows bestaat
Op je laptop werkt alles, maar in Linux en straks in Docker niet:
ERROR: Could not find a version that satisfies the requirement pywin32==306 (from versions: none)
ERROR: No matching distribution found for pywin32==306
Oorzaak: er staat een package in je lijst dat alleen voor Windows bestaat, zoals pywin32 of pywinpty. Het kwam mee met iets anders dat je ooit in deze virtual environment installeerde, zoals Jupyter.
Oplossing: heeft je site het niet nodig, haal die regel dan uit requirements.txt, en commit het bestand opnieuw.
Opdrachten
Opdracht 1: Investigate - Wat zit er in fastapi[standard]?
Zoek in je requirements.txt de regel met uvicorn. Je hebt dat package nooit zelf geïnstalleerd. Waarom staat het er toch?
Tip
fastapi dev start een server. Welk programma doet dat werk?
Antwoord
fastapi[standard] brengt de packages mee die FastAPI nodig heeft om een server te starten, en uvicorn is die server. python -m pip freeze schrijft ook die op. Zonder uvicorn werkt fastapi run op de server niet.
Door naar les 5: een README.