2026, Jan 13 18:02
Исправляем no python application found в uWSGI на PythonAnywhere: проблема в виртуальном окружении
Разбор ошибки no python application found при деплое Django на PythonAnywhere: uWSGI падает из‑за сломанного виртуального окружения (ModuleNotFoundError math).
Перенос Django‑приложения с одного хоста на другой — обычная задача, пока платформа не отвечает «Internal Server Error», а серверный лог не заявляет: «no python application found». Если в том же логе всплывает ещё и ModuleNotFoundError для стандартного модуля вроде math при импорте datetime, это уже не типичная ошибка конфигурации приложения — перед вами сломанное виртуальное окружение.
Контекст
Приложение работает на PythonAnywhere с Python 3.11 и uWSGI. Лог ошибок пуст, а серверный лог описывает следующую цепочку: стартует воркер, uWSGI находит виртуальное окружение, после чего всё падает с трейcбеком внутри стандартного модуля datetime при попытке импортировать math; затем идут сообщения «unable to load app 0 (callable not found or import error)» и знакомое «no python application found». На фронтенде отображается обычная «Internal Server Error».
Минимальный пример
В том же виртуальном окружении даже тривиальный импорт приводит к сбою. Маленький фрагмент демонстрирует проблему:
try:
import datetime as dt_unit
print(dt_unit.datetime.utcnow())
except Exception as problem:
print(type(problem).__name__, str(problem))
Вместо выполнения он поднимает ModuleNotFoundError для math во время импорта стандартного модуля datetime — ровно то, что видно в серверном логе.
Что на самом деле ломается
uWSGI не может загрузить WSGI‑приложение, потому что в настроенном виртуальном окружении срывается импорт стандартной библиотеки Python. Сообщение «unable to load app 0 (callable not found or import error)» об этом и говорит, а «no python application found» — лишь следствие, когда инициализация уже не удалась. Пустой error‑лог этому не противоречит: в серверном логе уже есть критичный трейcбек, который останавливает запуск.
Рабочее решение
Первопричиной оказалось само виртуальное окружение. Пересоздание окружения на той же версии Python давало тот же сбой, а создание на следующей версии сработало. Переключение приложения на новое виртуальное окружение устранило ошибку импорта math и позволило uWSGI загрузить Django‑приложение.
Проверка результата
После перехода на виртуальное окружение с более новой версией Python быстрая проверка показывает, что стандартная библиотека импортируется как положено:
import math as mathlib
from datetime import datetime as when
print("stdlib ok:", mathlib.pi, when.utcnow())
Когда импорты ведут себя нормально, uWSGI инициализируется без проблем, и сообщения «no python application found» исчезают.
Почему это важно
Когда платформа сообщает о типовой ошибке при запуске, легко начать копаться в настройках Django, путях WSGI или PYTHONPATH. Но если в серверном логе виден ModuleNotFoundError для модулей стандартной библиотеки, проблема лежит ниже уровня вашего приложения — в виртуальном окружении. Умение распознать этот признак экономит часы бесплодной отладки.
Практические выводы
Начните с серверного лога: в такой ситуации там уже есть ключевой трейcбек. Если сбой воспроизводится минимальным импортом в том же виртуальном окружении, относитесь к нему как к подозрительному. Пересоберите окружение, а если на той же версии Python оно всё ещё ведёт себя неправильно, перенесите приложение в виртуальное окружение, созданное на следующей доступной версии Python. Именно этот шаг здесь и помог.
Здоровое виртуальное окружение — базовое условие любого развёртывания Django. Если падают импорты из стандартной библиотеки, сначала приводите в порядок окружение — остальной стек подтянется.