We use uv to compile requirements.txt from pyproject.toml to get the locked versions.
# Makefile
compile-deps:
uv pip compile pyproject.toml -o requirements.txt
compile-deps-dev:
uv pip compile --extra=dev pyproject.toml -o requirements.dev.txt