Как откатить aiogram до 2 версии

Ошибка ImportError: cannot import name 'executor' после обновления aiogram — типичный признак того, что код написан под вторую версию библиотеки, а в окружении установилась третья. В aiogram 3.x полностью изменился API: исчез модуль executor, класс Bot перестал принимать parse_mode в конструкторе, а хендлеры регистрируются через роутеры. Самый быстрый способ вернуть работоспособность бота — откатить пакет до ветки 2.x.

В этой инструкции разберём, как проверить текущую версию, корректно удалить aiogram 3.x, установить нужный релиз второй ветки и зафиксировать зависимости, чтобы проблема не повторилась при следующем деплое.

Почему код ломается после обновления до aiogram 3

Третья версия aiogram — это фактически новая библиотека с несовместимым синтаксисом. Если проект писался по старым гайдам и использует конструкции вроде executor.start_polling(dp) или декоратор @dp.message_handler(), то на aiogram 3.x такой скрипт упадёт сразу при запуске.

Типичные симптомы несовместимости:

  • 🔴 ImportError: cannot import name 'executor' from 'aiogram';
  • 🟡 TypeError: Bot.__init__() got an unexpected keyword argument 'parse_mode';
  • 🟠 AttributeError: 'Dispatcher' object has no attribute 'message_handler';
  • 🔵 ошибки при импорте aiogram.contrib.fsm_storage — этого модуля в третьей версии нет.
⚠️ Внимание: ветка aiogram 2.x больше не получает активных обновлений и новых функций Bot API. Откат — рабочее решение для поддержки существующего кода, но для новых проектов имеет смысл изучить миграцию на 3.x.

Шаг 1. Проверяем установленную версию

Перед откатом убедитесь, какая версия стоит в текущем окружении. Выполните в терминале с активированным виртуальным окружением:

pip show aiogram

В выводе найдите строку Version:. Если там 3.x.x, а код написан под вторую ветку — переходите к следующему шагу. Проверить версию можно и из самого Python:

python -c "import aiogram; print(aiogram.__version__)"

Если команда падает с ошибкой импорта, это тоже косвенно подтверждает конфликт версий — библиотека установлена, но её API не соответствует ожиданиям кода.

Шаг 2. Удаляем aiogram 3.x и ставим вторую версию

Сначала удалите текущий пакет, чтобы исключить смешение файлов разных версий:

pip uninstall aiogram -y

Затем установите последний релиз второй ветки. На момент её поддержки финальной была линейка 2.25.x, но надёжнее указать диапазон, чтобы pip сам выбрал последний доступный релиз ветки 2:

pip install "aiogram<3"

Либо зафиксируйте конкретную версию, если она известна и проверена в вашем проекте:

pip install aiogram==2.25.2

☑️ Чек-лист отката aiogram

Выполнено: 0 / 5

После установки снова выполните pip show aiogram — в строке версии должно быть значение, начинающееся с 2.. Это подтверждает успешный откат.

Шаг 3. Проверяем совместимость зависимостей

Откат aiogram может потянуть за собой конфликты с пакетами, которые были установлены под третью версию. Например, aiohttp новых релизов или сторонние библиотеки, собранные специально под aiogram 3.

Что проверить после отката:

  • 🧩 pip check — покажет нарушенные зависимости в окружении;
  • 📦 pip list — сверьте версии aiohttp, pydantic и magic-filter с требованиями aiogram 2.x;
  • 🔁 сторонние модули (календари, пагинация, FSM-утилиты) — убедитесь, что они поддерживают вторую ветку.

Если pip check сообщает о конфликте, переустановите проблемный пакет с указанием совместимой версии. Для aiogram 2.x обычно требуется aiohttp ветки 3.x и pydantic первой версии — точные требования указаны в метаданных самого пакета aiogram, их можно посмотреть через pip show aiogram в строке Requires.

📊 Почему вы откатываете aiogram до 2 версии?
Код написан под старый API и падает с ошибками
Использую старый туториал или шаблон
Сторонняя библиотека работает только с aiogram 2
Просто привык ко второй версии

Шаг 4. Фиксируем версию в requirements.txt

Чтобы при следующем деплое или переустановке окружения pip снова не подтянул третью версию, зафиксируйте зависимость. Откройте requirements.txt и приведите строку с aiogram к одному из вариантов:

aiogram==2.25.2

Или с ограничением сверху:

aiogram>=2.20,<3

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

⚠️ Внимание: если в проекте используется pip install --upgrade в скриптах деплоя, без жёсткой фиксации версии aiogram обновится до 3.x автоматически, и бот снова упадёт. Всегда закрепляйте версию после отката.

Сравнение aiogram 2 и 3: что меняется при откате

Таблица ниже поможет понять, какие конструкции кода снова станут рабочими после отката на вторую ветку.

Элементaiogram 2.xaiogram 3.x
Запуск поллингаexecutor.start_polling(dp)await dp.start_polling(bot)
Хендлер сообщений@dp.message_handler()@router.message()
parse_modeпередаётся в Bot(token, parse_mode=...)через DefaultBotProperties
Хранилища FSMaiogram.contrib.fsm_storageaiogram.fsm.storage
Фильтрыпараметры декоратора (commands=, text=)объекты фильтров (Command(), F.text)
А если откат не помог и ошибки остались?

Проверьте, что запускаете скрипт тем же интерпретатором, в котором меняли пакет: команда python -m pip show aiogram покажет версию именно для этого Python. Также удалите кеш __pycache__ в папке проекта и перезапустите скрипт. Если ошибка сохраняется, убедитесь, что в проекте нет локальной папки с именем aiogram, которая могла бы перекрывать установленный пакет.

Альтернатива откату: миграция кода на aiogram 3

Откат — быстрое решение, но не единственное. Если проект активно развивается, имеет смысл переписать его под третью версию: она получает поддержку новых возможностей Telegram Bot API, тогда как вторая ветка остаётся в замороженном состоянии.

Миграция обычно включает замену executor на асинхронный запуск через asyncio, перенос хендлеров на роутеры и обновление фильтров. Для небольшого бота это работа на несколько часов, для крупного проекта с FSM и middleware — существенно дольше. Поэтому на практике многие комбинируют подходы: сначала откат для восстановления работоспособности, затем постепенный переход на 3.x в отдельной ветке репозитория.

⚠️ Внимание: не держите в одном окружении код, частично написанный под aiogram 2 и частично под aiogram 3, — синтаксис несовместим, и такой гибрид гарантированно не запустится. Выбирайте одну версию на проект.

Часто задаваемые вопросы

Как узнать, под какую версию aiogram написан мой код?

Ищите характерные конструкции: from aiogram import executor и @dp.message_handler() указывают на aiogram 2.x, а Router(), F.text и await dp.start_polling(bot) — на третью версию.

Можно ли установить aiogram 2 и 3 одновременно?

В одном окружении — нет, пакет один и версии заменяют друг друга. Но можно создать два отдельных виртуальных окружения: одно с aiogram 2.x для старого бота, другое с 3.x для нового проекта.

Какая версия aiogram 2.x последняя?

Финальные релизы второй ветки относятся к линейке 2.25.x. Чтобы получить последний доступный, используйте команду pip install "aiogram<3" — pip сам выберет максимальную версию ниже третьей.

После отката появилась ошибка с aiohttp. Что делать?

Возможная причина — слишком новая версия aiohttp, установленная под aiogram 3. Выполните pip check для диагностики и понизьте aiohttp до совместимой ветки 3.x, ориентируясь на требования из pip show aiogram.

Будет ли aiogram 2.x работать с новыми функциями Telegram?

Нет, вторая ветка не получает поддержку новых возможностей Bot API. Если боту нужны свежие функции Telegram, единственный путь — миграция кода на aiogram 3.x.