venv, который не ломается после обновления Python

Обновился минорный Python — и окружение отвалилось с невнятной ошибкой про отсутствующий модуль. Причина в том, что venv хранит внутри себя ссылку на конкретный интерпретатор и путь к его стандартной библиотеке. Меняется интерпретатор — ссылка повисает.

Что помогает

Не чинить окружение, а пересоздавать его. Это дёшево, если состав пакетов записан в файл, а не живёт только в голове:

python -m venv --clear .venv
.venv/bin/pip install -r requirements.txt

Флаг --clear вычищает старое содержимое вместо того, чтобы дописывать поверх. Без него остаются артефакты от прежней версии, и диагноз становится ещё запутаннее.

Что не помогает

Правка путей внутри pyvenv.cfg руками. Иногда срабатывает, но оставляет окружение в состоянии, которое невозможно воспроизвести на другой машине. А воспроизводимость — единственное, ради чего venv вообще заводят.

Ещё одно: окружение не место для хранения. Каталог .venv не должен попадать ни в архив, ни в репозиторий — он собирается из requirements.txt за полминуты.