botdepobotdepoВсе статьи

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. Но ставить нужно другой пакет. Самые частые пары:

Не уверены — вставьте код в генератор 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. Остальным библиотекам обычно достаточно имени без версии.