botdepobotdepoВсе статьи

2 октября 2026 г.

python: can't open file … [Errno 2] No such file or directory — бот не находит главный файл

Бот даже не начинает работать: в логе одна строка python: can't open file '/app/main.py': [Errno 2] No such file or directory, и процесс завершается. Ни traceback, ни ошибок в коде, потому что до кода дело не дошло.

Что значит эта ошибка

Python запустили командой вида python main.py, а файла с таким именем по этому пути нет. Это ошибка не в вашем коде, а в команде запуска: она указывает не на тот файл.

Причины по убыванию вероятности

  1. Главный файл называется иначе. Команда ждёт main.py, а у вас bot.py, 01bot.py или telegram_bot.py. Самый частый случай.
  2. Код лежит во вложенной папке. В репозитории my-bot/bot.py или src/bot.py, а команда ищет файл в корне.
  3. Опечатка или регистр. Bot.py и bot.py на Linux — разные файлы, хотя на Windows и macOS это одно и то же.
  4. Файл не закоммичен. Он есть у вас на диске, но не попал в git (забыли git add или он в .gitignore).

Как исправить

  1. Откройте репозиторий на GitHub и посмотрите, что лежит в корне. Именно там, в браузере, а не у себя на диске: так вы увидите то, что видит сервер.
  2. Укажите команду запуска для настоящего главного файла:
    python bot.py
    Если файл во вложенной папке, лучше перенести код в корень. Временное решение — указать путь: python src/bot.py. Но тогда относительные пути внутри бота будут считаться от корня.
  3. Проверьте, что файл в git:
    git ls-files | grep .py
    Если его там нет — git add bot.py && git commit -m "add bot" && git push.

Как это устроено в botdepo

Поле «Команда запуска» можно оставить пустым. Тогда botdepo сам ищет в корне репозитория main.py, bot.py, app.py, run.py, а если .py файл ровно один, берёт его. Если главный файл называется иначе (например, 01bot.py) или файлов несколько, впишите команду руками: python 01bot.py. Файлы бота и requirements.txt должны лежать в корне репозитория. Задеплоить бота.

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

Почему путь начинается с /app?

Это папка внутри контейнера, куда копируется ваш репозиторий. /app/main.py — это main.py в корне репозитория.

У меня бот из нескольких файлов, какой указывать?

Тот, который вы запускаете у себя командой python …, — обычно в нём есть start_polling, run_polling или infinity_polling. Остальные файлы он импортирует сам.