Full threadl0b0·Nix shells are excellent for this. See simple [1], intermediate [2], and complex [3] examples.[1] https://gitlab.com/engmark/engmark.gitlab.io[2] https://gitlab.com/engmark/mypy-exercises[3] https://github.com/linz/emergency-management-toolsView on HN