MAATRIX / Блог / Python 3.10 завершил поддержку: переносим Telegram-бота на новую версию

Python 3.10 завершил поддержку: переносим Telegram-бота на новую версию

MAATRIX · 17 октября 2026 · 8 мин чтения

Бот отвечает на сообщения, принимает заявки и исправно сообщает, что всё хорошо. Python под ним тем временем завершил жизненный цикл. У программ есть неприятная привычка не предупреждать о подобных обстоятельствах собственным голосом: работающий процесс выглядит вполне здоровым даже тогда, когда обновления его основы уже закончились.

1 октября 2026 года вышел Python 3.10.22 — последний выпуск ветки 3.10. В объявлении команды Python прямо указано завершение поддержки. На дату этой статьи ждать будущего окончания уже не нужно: оно произошло. Разберём перенос бота так, чтобы не потерять обновления Telegram, секреты и возможность вернуться к прежней версии приложения.

Перенесите бота в поддерживаемое окружение

Для проверки нового Python используйте отдельный VPS MAATRIX и тестового бота. Лёгкий проект можно начать с 1 vCPU и 2 GB памяти.

ВЫБРАТЬ VPS

Сначала выясните, чем бот запускается

Команда python3 --version в вашем терминале не обязательно описывает работающий сервис. Бот может жить в виртуальном окружении, контейнере, менеджере процессов или давно открытом tmux. Найдите фактическую команду запуска, пользователя, рабочий каталог и источник переменных окружения.

Для службы systemd посмотрите её определение и путь ExecStart. Не публикуйте полный вывод, если секреты неудачно записаны прямо в unit-файле. Отметьте также, как запускаются периодические задания и вспомогательные обработчики: переезд одного процесса не обновляет остальные автоматически.

Внутри старого окружения сохраните сведения:

/path/to/old-venv/bin/python --version
/path/to/old-venv/bin/python -m pip freeze > requirements-observed.txt
/path/to/old-venv/bin/python -m pip check

Путь здесь примерный, его заменяют найденным. Файл requirements-observed.txt фиксирует наблюдаемое состояние, но не становится автоматически хорошим набором зависимостей. В нём могут оказаться пакеты, установленные для разовой отладки. Основным источником остаются файлы проекта и принятый в нём способ фиксации версий.

Выбор новой версии начинается с библиотеки бота

Проверьте совместимость используемой библиотеки Telegram, драйвера базы, HTTP-клиента и пакетов с нативными расширениями. Для нового окружения выбирают поддерживаемую версию Python, для которой доступен весь набор зависимостей. Не обязательно прыгать на самый свежий выпуск в день его появления.

Например, Python 3.13 или 3.14 могут быть разумными кандидатами после проверки проекта. Переход на 3.11 только ради минимальной разницы стоит оценивать с учётом оставшегося срока сопровождения: слишком короткий горизонт быстро приведёт к повторению работы.

Если Python получен из пакетов ОС, проверьте политику сопровождения дистрибутива. Она может отличаться от сроков исходного проекта. Но для собственного приложения всё равно нужен понятный план: кто поставляет исправления, как обновляется окружение и чем подтверждена совместимость.

Не меняйте системный /usr/bin/python3 вручную и не подменяйте его ссылкой ради бота. Служебные инструменты операционной системы могут зависеть от своей версии. Приложение получает отдельный интерпретатор или контейнер, а система сохраняет предусмотренную разработчиками конфигурацию.

Новое окружение создаётся заново

Виртуальное окружение не стоит переносить копированием каталога между версиями Python. Оно связано с интерпретатором и путями. Документация venv описывает его как воспроизводимое окружение, которое проще создать повторно из описания зависимостей.

Ниже пример для уже установленного Python 3.14 и отдельной копии проекта. Если проверенная целевая версия другая, меняется команда интерпретатора. Рабочее окружение эти действия не затрагивают:

python3.14 -m venv .venv-next
.venv-next/bin/python -m pip install --upgrade pip
.venv-next/bin/python -m pip install -r requirements.txt
.venv-next/bin/python -m pip check

Если проект использует lock-файл другого менеджера, применяйте его штатный режим воспроизводимой установки. Не заменяйте это произвольным обновлением всех пакетов. Смена Python и одновременный скачок каждой библиотеки создают слишком много причин для одной ошибки.

При отсутствии готового бинарного пакета установка может попытаться собрать зависимость из исходников. Тогда понадобятся компилятор и системные библиотеки. Зафиксируйте их в описании окружения. Фраза «на моём ноутбуке установилось» не переносит заголовочные файлы на VPS.

Отделяем исправления кода от миграции данных

Прочитайте разделы переноса в документации выбранной версии, включая промежуточные изменения. Для Python 3.14 полезен раздел porting в What’s New. Особое внимание уделите работе с асинхронными задачами, обработке времени, TLS и удалённым устаревшим возможностям.

Запустите тесты проекта в новом окружении. Дополнительно проверьте импорт всех точек входа и создание основных клиентов без обращения к реальным платежам или массовым рассылкам. Успешный импорт — начало проверки, а не доказательство работы всех веток.

Не меняйте схему базы без необходимости. Если обновление библиотеки или приложения всё-таки требует миграции, выполните её сначала на отдельной копии и выясните обратимость. Старый Python может запускаться прекрасно, но прежний код уже не понимать изменённые таблицы. Это разные причины, и лечатся они разными способами.

Сохраните идентификатор версии кода, набор зависимостей и настройки запуска для обеих сторон. Такой комплект позволяет воспроизвести результат; папка с названием bot_new_final2 только демонстрирует силу человеческой надежды.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

АРЕНДОВАТЬ СЕРВЕР

Тестовый бот получает свой токен

Создайте отдельного бота через BotFather и используйте отдельную базу либо безопасную копию. Не запускайте два независимых long polling процесса с одним рабочим токеном. Они будут конкурировать за получение обновлений, и тест перестанет быть изолированным.

Для webhook нужен отдельный тестовый адрес и корректный HTTPS. Рабочий webhook не следует временно направлять на стенд только ради одного сообщения. Проверьте, что тестовый бот не имеет доступа к настоящим каналам рассылки, платёжным ключам и административным командам production.

Отправьте команду запуска, обычный текст, файл, нажатие кнопки и некорректный ввод. Проверьте длинное сообщение, повторное нажатие и ситуацию, когда пользователь прервал диалог. Именно такие действия часто обходят красивый демонстрационный сценарий.

Затем временно сделайте недоступной учебную базу или внешний API. Бот должен ограниченно повторять запрос, не терять контекст без объяснения и не заваливать журнал секретами. После восстановления проверьте продолжение работы и отсутствие дублей заявок.

Что происходит с очередью Telegram

Способы получения обновлений и их ограничения описаны в Telegram Bot API. Long polling и webhook не работают как два параллельных независимых потребителя одного бота. При переносе сохраняйте выбранный способ либо отдельно планируйте его изменение.

Для long polling остановите старый процесс, убедитесь, что он действительно завершился, и только затем запускайте новый с рабочим токеном. Приложение должно корректно учитывать подтверждённые обновления и защищаться от повторной обработки. Идентификатор обновления полезен для такой защиты, но бизнес-операции тоже должны быть устойчивы к повтору.

Для webhook переключайте обработчик по подготовленной процедуре. Не используйте опцию удаления ожидающих обновлений, если не хотите сознательно их потерять. Перед сменой проверьте состояние очереди и ошибки доставки, после — возобновление обработки. Заранее решите, как обрабатываются сообщения, пришедшие во время окна обслуживания.

Полезно отправить контрольную заявку перед остановкой, во время перехода и сразу после запуска. Это не нагрузочный тест, а проверка непрерывности: каждая заявка должна получить понятный результат без двойного списания или создания двух одинаковых заказов.

Завершение процесса нужно испытать отдельно

На стенде отправьте боту несколько учебных задач и инициируйте штатную остановку. Посмотрите, дожидается ли он текущей операции, закрывает ли соединения и сохраняет ли незавершённую работу. Сервис, который отвечает на сообщения, но теряет задания при каждом обновлении, ещё не готов к переносу.

Установите разумный срок завершения в системе запуска и сопоставьте его с длительностью задач. Если обработка файла занимает минуты, короткое принудительное завершение потребует очереди и безопасного повтора. Не увеличивайте тайм-аут бесконечно ради зависшей операции: у неё должен быть собственный предел и понятный результат ошибки. После повторного запуска проверьте, что учебная задача выполнена ровно один раз по правилам вашего приложения.

Ресурсы нового VPS

Простому боту без тяжёлой обработки файлов для пилота может хватить MAATRIX Ba Lite с 1 vCPU и 2 GB памяти. Если рядом находятся PostgreSQL, Redis и несколько рабочих процессов, рассмотрите Uab Start или Heka Standard. Фактический выбор зависит от пиков, размера очереди и характера задач.

Ubuntu или Debian выбирайте вместе со способом установки нужного Python. Контейнер упрощает фиксацию интерпретатора, но не отменяет обновления базового образа и резервное копирование данных. При запуске через systemd закрепите полный путь к интерпретатору, рабочий каталог и служебного пользователя.

Размещение влияет на задержку до Telegram и внешних API, однако сама страна сервера не гарантирует доступность всех сервисов. Проверьте необходимые подключения со стенда. Диск рассчитывайте с учётом вложений и журналов; для обычного текстового бота они иногда оказываются единственными неожиданно растущими данными.

Возврат должен быть подготовлен до переключения

Сохраните старый код и окружение, но держите старый обработчик остановленным после перехода. Если новая версия отказывает, сначала остановите её, затем верните прежнюю команду запуска и проверьте очередь. Одновременный запуск обеих версий не является страховкой.

Если схема базы не менялась, возврат обычно проще. Если менялась, нужен отдельный план сохранения новых записей. Не восстанавливайте старую копию поверх рабочей базы автоматически: она не содержит заявок, полученных после обновления.

После успешного запуска проверьте перезагрузку VPS, автоматический старт службы, лимиты журналов и резервное копирование. Наблюдайте за ошибками и задержкой обработки несколько рабочих циклов, включая задания по расписанию. Старую версию удаляйте после принятия результата, а дату следующего пересмотра окружения внесите в календарь. Хорошо обслуживаемый бот не должен дожидаться, пока очередной интерпретатор уйдёт на пенсию без предупреждения.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

АРЕНДОВАТЬ СЕРВЕР

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →