Разгребается это по шагам, и шаг первый именно тот, что назвал Тимур: зафиксировать список.
Шаг второй, самый важный: возвращать назад по одному пакету, начиная с того, который ближе всего к тексту ошибки. Массовый откат всех двадцати восьми превращает боевую машину в кашу, потому что часть пакетов уже подтянула за собой зависимости, и обратно они уходят с боем.
По вашим ошибкам всё читается сразу. Missing dependencies for SOCKS support появляется, когда urllib3 второй ветки стоит рядом со старым requests: поддержка сокетов там переехала, и старая обвязка её ищет по прежнему адресу. Второе про distutils это питон свежей ветки, оттуда модуль убрали совсем.
Шаг третий: питоновские пакеты уводите из системных в отдельное окружение, тогда обновление системы перестаёт трогать прогон.
python3 -m venv /opt/progon/venv
/opt/progon/venv/bin/pip install "requests[socks]==2.31.0" "urllib3==1.26.18"
/opt/progon/venv/bin/python -c "import socks; print('ok')"
Шаг четвёртый: то, что откатили, придержать, чтобы следующее обновление не вернуло всё обратно.
sudo apt-mark hold python3-urllib3