🐛 Типичные ошибки

❌ Ошибка 1: ModuleNotFoundError: No module named 'flask'

# Неправильно — запуск без виртуального окружения
python app.py
# ModuleNotFoundError: No module named 'flask'

Почему возникает: Flask установлен внутри виртуального окружения, но оно не активировано. Python ищет пакеты в глобальном окружении, где Flask нет.

✅ Исправление

# Windows
venv\Scripts\activate

# Mac/Linux
source venv/bin/activate

# Проверьте, что Flask виден
pip list | findstr flask   # Windows
pip list | grep flask      # Mac/Linux

# Теперь запускайте
python app.py

Что изменилось: после активации venv Python ищет пакеты в папке venv/, где установлен Flask.

❌ Ошибка 2: Address already in use (порт 5000 занят)

# Ошибка в терминале
OSError: [Errno 98] Address already in use

Почему возникает: предыдущий запуск Flask всё ещё работает в фоне, либо другая программа заняла порт 5000.

✅ Исправление

Вариант 1 — изменить порт:

app.run(debug=True, port=5001)

Вариант 2 — найти и завершить процесс (Windows):

netstat -ano | findstr :5000
taskkill /PID <номер_PID> /F

Вариант 3 — найти и завершить процесс (Mac/Linux):

lsof -i :5000
kill -9 <PID>

❌ Ошибка 3: 404 Not Found при открытии маршрута

# В браузере: Not Found
# The requested URL was not found on the server.

Почему возникает: либо опечатка в URL, либо маршрут не зарегистрирован (например, функция с @app.route ниже блока if __name__).

✅ Исправление

  1. Проверьте URL в браузере — совпадает ли с @app.route(...).
  2. Убедитесь, что декоратор @app.route стоит прямо над функцией, без пустых строк между ними.
  3. Убедитесь, что код с маршрутом выполняется при запуске (не внутри другой функции).

❌ Ошибка 4: Циклический импорт (Circular Import)

# app.py импортирует views.py
# views.py импортирует app из app.py
# ImportError: cannot import name 'app'

Почему возникает: два модуля импортируют друг друга. Python не может разрешить зависимость.

✅ Исправление

Используйте Application Factory или Blueprints (см. раздел «Старый vs Новый»). В простых случаях — держите маршруты в одном файле до тех пор, пока проект не вырастет.