botdepobotdepoВсе статьи

11 октября 2026 г.

Как создать requirements.txt для Telegram-бота

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

Что это за файл

Обычный текстовый файл, по одной библиотеке на строку. Сервер выполняет pip install -r requirements.txt и ставит ровно то, что там перечислено. Для типичного бота на aiogram он выглядит так:

aiogram>=3
python-dotenv
aiosqlite

Кладётся в корень репозитория, рядом с главным файлом бота (bot.py, main.py). Имя строго requirements.txt, без заглавных букв и без .txt.txt (Windows любит прятать расширение).

Способ 1. Руками — для небольшого бота лучший

  1. Откройте все .py-файлы бота и выпишите всё, что стоит после import и from … import.
  2. Вычеркните стандартную библиотеку Python — она есть всегда: os, sys, json, asyncio, sqlite3, logging, datetime, random, re и т.п.
  3. Оставшееся запишите в файл — но под именем пакета, а не модуля (таблица ниже).

Имя в import ≠ имя пакета

Главная ловушка. В коде одно имя, а устанавливать нужно другое:

import в коде   →  строка в requirements.txt
telebot         →  pyTelegramBotAPI
telegram        →  python-telegram-bot
dotenv          →  python-dotenv
PIL             →  Pillow
bs4             →  beautifulsoup4
yaml            →  PyYAML

Полная таблица и разбор ошибки, которая получается, если перепутать, — в статье про ModuleNotFoundError: No module named.

Способ 2. pip freeze — только из виртуального окружения

Если вы с самого начала работали в venv, достаточно одной команды:

# активируйте окружение проекта, потом:
pip freeze > requirements.txt

Если же пакеты ставились в системный Python, pip freeze выгрузит всё, что когда-либо стояло на компьютере: библиотеки от других проектов, пакеты только под Windows. Часть из них на сервере не соберётся, и бот упадёт ещё на установке. В этом случае лучше способ 1 или 3.

Способ 3. Сгенерировать по импортам

Утилита pipreqs читает импорты в коде и пишет файл сама:

pip install pipreqs
pipreqs . --force

Результат стоит проверить глазами: изредка она подставляет не тот пакет или ставит версии точнее, чем нужно. Если не хочется ничего ставить, вставьте код бота в наш бесплатный генератор requirements.txt — он работает прямо в браузере и знает частые пары «импорт → пакет» для ботов.

Версии: когда их фиксировать

Для старта версии можно не указывать: поставится последняя. Но если код написан под конкретную мажорную версию, зафиксируйте её, иначе завтра выйдет новая и всё сломается. Самый частый случай — aiogram:

Подробно про разницу — в статье cannot import name 'executor' from 'aiogram.utils'.

Проверьте файл перед деплоем

Создайте чистое окружение и поставьте в него только то, что в файле. Ровно это сделает сервер:

python -m venv /tmp/check
source /tmp/check/bin/activate      # Windows: \tmp\check\Scripts\activate
pip install -r requirements.txt
python bot.py

Запустился — значит, на сервере тоже запустится. Упал с ModuleNotFoundError — допишите недостающий пакет и повторите. Не забудьте закоммитить и запушить файл: частая ошибка — создать его локально и не отправить в репозиторий.

Или без всего этого

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

Частые вопросы

Где должен лежать requirements.txt?

В корне репозитория, рядом с главным файлом бота. Если бот лежит в подпапке, сервер файл не найдёт — перенесите и бота, и файл в корень.

Нужно ли писать sqlite3, asyncio, os?

Нет. Это стандартная библиотека, она уже есть в Python. Если их записать, pip упадёт с «No matching distribution found».

А если бот на Node.js?

Тогда вместо requirements.txt нужен package.json — его создаёт npm init, а библиотеки туда записывает npm install имя.