Установка, виртуальное окружение и первый запуск

Перед первой строкой кода нужно изолированное окружение: отдельная песочница с Python и Flask, которая не конфликтует с другими проектами.
Виртуальное окружение — это папка со своей копией интерпретатора и пакетов. Установил туда Flask — он есть только в этом проекте. Удалил папку — и следов не осталось. Без этого пакеты разных проектов перемешиваются и ломают друг друга.

Зачем вообще окружение? Представь, что проект А требует Flask 2.3, а проект Б — Flask 3.1. Если ставить пакеты «глобально», одна версия затрёт другую. Виртуальное окружение решает это раз и навсегда: у каждого проекта свой набор зависимостей нужных версий. Это первое, что делает любой профессиональный Python-разработчик, заходя в новый проект.

Создаётся окружение модулем venv из стандартной библиотеки, активируется, и уже внутрь ставится Flask через pip. После активации в начале строки терминала появляется имя окружения в скобках — признак, что ты внутри песочницы.

python3 -m venv venv
source venv/bin/activate        # Windows: venv\Scripts\activate
pip install Flask
pip freeze > requirements.txt

Файл requirements.txt фиксирует точные версии — по нему любой другой человек (или сервер) воспроизведёт то же окружение командой pip install -r requirements.txt. Это договор о зависимостях проекта.

Теперь минимальное приложение. Создай файл app.py:

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "Привет, Flask!"

И запусти сервер разработки:

flask --app app run --debug

Открой в браузере http://127.0.0.1:5000 — увидишь приветствие. Флаг --debug включает автоперезагрузку при изменении кода и подробную страницу ошибок. В продакшене его держать нельзя — это дыра в безопасности.

Стоит сразу выработать привычку: новый проект начинается не с кода, а с окружения и репозитория. Создал папку, поднял venv, активировал, поставил Flask, зафиксировал requirements, добавил venv в .gitignore — и только потом пишешь app.py. Это пять минут, которые избавляют от часов разбирательств с конфликтами версий позже. Отдельно про флаг --debug: он не только показывает удобный трейсбек при ошибке, но и перезагружает сервер при каждом сохранении файла, поэтому в разработке его держат включённым, а в продакшене — категорически выключенным, иначе любой посетитель сможет открыть интерактивную консоль и выполнить код на твоём сервере.

Как работает под капотом

Что происходит за командой flask run, по шагам:

  flask run
     │
     ▼
  найти объект Flask (app) в указанном модуле
     │
     ▼
  поднять встроенный WSGI-сервер на 127.0.0.1:5000
     │
     ▼
  ждать запросы ──▶ на каждый: маршрут → view → ответ

Строка app = Flask(__name__) создаёт объект приложения. Аргумент __name__ подсказывает Flask, где искать шаблоны и статику относительно текущего модуля. Декоратор @app.route("/") регистрирует функцию index как обработчик корневого URL. Когда придёт запрос на «/», Flask вызовет index и превратит возвращённую строку в HTTP-ответ.

Смоделируем «реестр маршрутов» из декоратора обычным Python, чтобы увидеть механику регистрации:

registry = {}

def route(path):
    def decorator(func):
        registry[path] = func
        return func
    return decorator

@route("/")
def index():
    return "Главная"

@route("/help")
def help_page():
    return "Помощь"

# имитируем входящий запрос
for path in ["/", "/help", "/none"]:
    handler = registry.get(path)
    print(path, "->", handler() if handler else "404")

Это ровно то, что делает @app.route внутри: кладёт функцию в таблицу маршрутов по ключу-пути. Запусти и убедись.

Частые ошибки

  • Забыть активировать окружение. Тогда pip ставит пакеты глобально. Проверь скобки (venv) в начале строки терминала.
  • Коммитить папку venv в git. Её добавляют в .gitignore — окружение пересоздаётся из requirements.txt.
  • Оставить --debug в продакшене. Дебаг-консоль позволяет выполнять произвольный код у тебя на сервере.

Best practices

  • Одно окружение на проект, всегда в .gitignore.
  • Фиксируй версии в requirements.txt и обновляй осознанно.
  • Используй переменную окружения FLASK_APP или флаг --app, не хардкодь запуск внутри кода без if __name__.

Что запомнить

  • Виртуальное окружение изолирует зависимости каждого проекта.
  • requirements.txt фиксирует версии для воспроизведения окружения.
  • flask run поднимает встроенный сервер разработки на 127.0.0.1:5000.
  • Флаг --debug удобен в разработке и опасен в продакшене.

Итог: окружение изолирует зависимости, requirements фиксирует версии, а flask run поднимает сервер разработки. Каркас готов — пора понять, как Flask связывает URL с кодом.

Проверьте себя
1. Зачем нужно виртуальное окружение?
AЧтобы ускорить работу Python
BЧтобы изолировать зависимости проекта от других проектов
CЧтобы зашифровать исходный код
DЭто обязательное требование HTTP
2. Что делает файл requirements.txt?
AХранит пароли приложения
BФиксирует список и версии зависимостей для воспроизведения окружения
CОписывает маршруты приложения
DЗаменяет виртуальное окружение