14 октября 2026 г.
No matching distribution found и ResolutionImpossible: не ставятся зависимости бота
Код на месте, requirements.txt есть, а сборка падает на установке библиотек: ERROR: Could not find a version that satisfies the requirement …, ERROR: No matching distribution found for … или ResolutionImpossible. До запуска бота дело не дошло: pip не смог собрать набор библиотек по вашему списку.
Сначала найдите строку-виновника
В логе сборки ищите последнюю строку с ERROR:. После for стоит имя пакета, на котором всё остановилось:
ERROR: Could not find a version that satisfies the requirement pywin32==306 ERROR: No matching distribution found for pywin32==306
Дальше — по списку причин ниже, от самой частой.
1. Пакет только для Windows
requirements.txt сделан командой pip freeze на Windows, и в него попало всё окружение: pywin32, pywinpty, comtypes и подобное. Бот на сервере работает под Linux, для него таких пакетов не существует.
Что делать: удалите эти строки. Надёжнее — оставить в файле только то, что бот реально импортирует, а не весь pip freeze. Как собрать короткий список — в статье как создать requirements.txt.
2. Имя для импорта ≠ имя пакета
В коде import telebot, а в requirements.txt так и написано — telebot. Но ставить нужно другой пакет. Самые частые пары:
import telebot→pyTelegramBotAPIimport telegram→python-telegram-botfrom dotenv import load_dotenv→python-dotenvimport yaml→PyYAMLfrom PIL import Image→Pillowimport cv2→opencv-python-headlessfrom bs4 import BeautifulSoup→beautifulsoup4
Не уверены — вставьте код в генератор requirements.txt: он сам подставит правильные имена пакетов по импортам.
3. Старая версия не ставится на свежий Python
Строка вида numpy==1.21.0 или aiohttp==3.8.1: такая версия вышла до Python 3.12, готовой сборки под него нет, и pip пытается собрать пакет из исходников — с длинной ошибкой компилятора в конце. Похоже выглядит и опечатка в версии, которой не существует вовсе.
Что делать: уберите ==версия у таких пакетов или поднимите её до свежей. Если код написан под aiogram 2 и обновлять его не хочется — укажите aiogram==2.25.2: в botdepo такие боты автоматически собираются на Python 3.11, где старые зависимости aiogram 2 ставятся.
4. Версии конфликтуют друг с другом
ERROR: Cannot install aiogram==3.13.0 and aiohttp==3.8.6 because these package versions have conflicting dependencies. ERROR: ResolutionImpossible
Один пакет требует одну версию общей библиотеки, второй — другую. Чаще всего это aiohttp, pydantic или httpx, закреплённые руками рядом с фреймворком.
Что делать: уберите из файла закреплённые версии этих «общих» библиотек — фреймворк сам подтянет подходящую. Оставьте версию только у главного пакета, например aiogram==3.13.0.
5. Файл в неправильной кодировке
Ошибка странная, с мусором в начале: Invalid requirement: 'ÿþa' или пустые символы между буквами. Так бывает, если выполнить pip freeze > requirements.txt в Windows PowerShell: он сохраняет файл в UTF-16, а pip ждёт UTF-8.
Что делать: откройте файл в VS Code или Notepad++, сохраните в кодировке UTF-8 и закоммитьте заново. Или запишите список руками — для бота это обычно 2–5 строк.
6. Пути с вашего компьютера
Строки вида aiogram @ file:///C:/Users/… или -e . появляются, если делать pip freeze из окружения conda или из проекта, установленного в режиме разработки. На сервере вашего диска нет.
Что делать: замените такие строки на обычные имена пакетов — aiogram, а не путь.
Как проверить до деплоя
Создайте чистое окружение и поставьте зависимости так же, как это сделает сервер:
python3.12 -m venv /tmp/check /tmp/check/bin/pip install -r requirements.txt
Прошло без ошибок — на сервере тоже поставится. В botdepo при ошибке установки в логе сборки видно ту же строку ERROR:, что и у вас локально; поправили файл и сделали коммит — со включённым автодеплоем новая сборка запустится сама. Задеплоить бота.
Частые вопросы
Локально всё ставится, а на сервере нет — почему?
Обычно другая система (Windows против Linux) или другая версия Python. Пакеты только для Windows и старые версии без сборки под Python 3.12 — две главные причины такой разницы.
Нужно ли закреплять версии?
Главному фреймворку — да, чтобы обновление не сломало бота: aiogram==3.13.0. Остальным библиотекам обычно достаточно имени без версии.