system/agents/stacks/LIBRARY_CATALOG.md

Каталог библиотек Python/FastAPI

Версия: 1.0.0
Дата: 2025-12-20
Назначение: Справочник для Проектора и Кодера


ИЕРАРХИЯ КАТЕГОРИЙ

УРОВЕНЬ 0: ЯДРО
├── 0.1 Фреймворк
├── 0.2 Сервер
└── 0.3 Конфигурация

УРОВЕНЬ 1: ДАННЫЕ
├── 1.1 ORM / База данных
├── 1.2 Миграции
├── 1.3 Валидация
├── 1.4 Сериализация
└── 1.5 Кэширование

УРОВЕНЬ 2: БЕЗОПАСНОСТЬ
├── 2.1 Хеширование паролей
├── 2.2 JWT токены
├── 2.3 OAuth2
└── 2.4 CORS / Security headers

УРОВЕНЬ 3: БИЗНЕС-ЛОГИКА
├── 3.1 Фоновые задачи
├── 3.2 Планировщик
├── 3.3 Очереди сообщений
└── 3.4 State machines

УРОВЕНЬ 4: ИНТЕГРАЦИИ
├── 4.1 HTTP клиент
├── 4.2 Email
├── 4.3 SMS
├── 4.4 Платежи
└── 4.5 Внешние API

УРОВЕНЬ 5: ФАЙЛЫ
├── 5.1 Файловая система
├── 5.2 S3 / Облако
├── 5.3 Изображения
├── 5.4 Excel / CSV
└── 5.5 PDF

УРОВЕНЬ 6: REAL-TIME
├── 6.1 WebSocket
├── 6.2 SSE
└── 6.3 Pub/Sub

УРОВЕНЬ 7: UI / FRONTEND
├── 7.1 Шаблоны
├── 7.2 Статика
└── 7.3 Админка

УРОВЕНЬ 8: ТЕСТИРОВАНИЕ
├── 8.1 Фреймворк
├── 8.2 Моки
├── 8.3 Фикстуры
└── 8.4 Покрытие

УРОВЕНЬ 9: OBSERVABILITY
├── 9.1 Логирование
├── 9.2 Метрики
├── 9.3 Трейсинг
└── 9.4 Профилирование

УРОВЕНЬ 10: ИНФРАСТРУКТУРА
├── 10.1 Контейнеризация
├── 10.2 ASGI сервер
├── 10.3 Reverse proxy
└── 10.4 CI/CD

УРОВЕНЬ 11: DEV TOOLS
├── 11.1 Линтер
├── 11.2 Форматтер
├── 11.3 Type checker
└── 11.4 Package manager

УРОВЕНЬ 0: ЯДРО

0.1 Фреймворк

Библиотека Статус Почему
FastAPI ✅ СТАНДАРТ Async native, автодокументация, type hints, скорость
Flask ❌ НЕТ Sync, нет автодокументации, устаревший подход
Django ❌ НЕТ Монолит, другая философия, медленнее
Starlette ⚠️ Если нужен минимум Основа FastAPI, но без валидации
# Почему FastAPI:
# 1. В 10-20x быстрее Django/Flask
# 2. Автоматическая OpenAPI документация
# 3. Валидация через Pydantic
# 4. Async из коробки
# 5. Type hints = меньше багов

from fastapi import FastAPI
app = FastAPI()

0.2 ASGI Сервер

Библиотека Статус Почему
uvicorn ✅ СТАНДАРТ Быстрый, async, от автора Starlette
gunicorn + uvicorn ✅ PRODUCTION Менеджер процессов + uvicorn workers
hypercorn ⚠️ Альтернатива HTTP/2, но менее популярен
daphne ❌ НЕТ Для Django Channels
# Development
uvicorn app.main:app --reload

# Production
gunicorn app.main:app -w 4 -k uvicorn.workers.UvicornWorker

Почему gunicorn + uvicorn:
- gunicorn управляет процессами (перезапуск при падении)
- uvicorn обрабатывает async запросы
- Вместе = надёжность + скорость


0.3 Конфигурация

Библиотека Статус Почему
pydantic-settings ✅ СТАНДАРТ Type-safe, валидация, .env поддержка
python-dotenv ✅ Вместе с pydantic Загрузка .env файлов
dynaconf ⚠️ Сложные случаи Много источников, environments
os.environ ❌ НЕТ Нет валидации, строки везде
# Почему pydantic-settings:
# 1. Валидация типов (int, bool, URL)
# 2. Значения по умолчанию
# 3. Документация настроек
# 4. Интеграция с FastAPI

from pydantic_settings import BaseSettings

class Settings(BaseSettings):
    database_url: str
    debug: bool = False
    api_key: str

    class Config:
        env_file = ".env"

settings = Settings()  # Автоматически загрузит из .env

УРОВЕНЬ 1: ДАННЫЕ

1.1 ORM / База данных

SQL

Библиотека Статус Почему
SQLAlchemy 2.0 async ✅ СТАНДАРТ Мощный, гибкий, async native в v2
SQLModel ⚠️ Простые случаи SQLAlchemy + Pydantic, меньше кода
SQLAlchemy 1.x ❌ НЕТ Legacy, нет native async
Django ORM ❌ НЕТ Только для Django
Tortoise ORM ⚠️ Альтернатива Async, Django-like синтаксис
# Почему SQLAlchemy 2.0:
# 1. Async native (не через greenlet)
# 2. Гибкий query builder
# 3. Поддержка всех БД
# 4. Type hints
# 5. Огромное сообщество

from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column

class Base(DeclarativeBase):
    pass

class User(Base):
    __tablename__ = "users"
    id: Mapped[int] = mapped_column(primary_key=True)
    email: Mapped[str] = mapped_column(unique=True)

NoSQL

Библиотека Статус Почему
Beanie ✅ MongoDB Async ODM, Pydantic модели
Motor ✅ MongoDB driver Async драйвер для MongoDB
redis-py (async) ✅ Redis Async поддержка
PyMongo ❌ НЕТ Sync, блокирует
# Почему Beanie для MongoDB:
# 1. Pydantic модели = валидация
# 2. Async native
# 3. Миграции из коробки

from beanie import Document

class User(Document):
    email: str
    name: str

    class Settings:
        collection = "users"

Драйверы

База Драйвер Почему
PostgreSQL asyncpg Самый быстрый async драйвер
PostgreSQL (sync) psycopg3 Современный sync
MySQL aiomysql Async для MySQL
SQLite aiosqlite Async для SQLite

1.2 Миграции

Библиотека Статус Почему
Alembic ✅ СТАНДАРТ Мощный, автогенерация, откат
aerich ⚠️ Для Tortoise Только с Tortoise ORM
Ручной SQL ❌ НЕТ Нет версионирования, опасно
# Почему Alembic:
# 1. Автогенерация миграций из моделей
# 2. Откат (downgrade)
# 3. Версионирование
# 4. Работает с SQLAlchemy

# Команды:
# alembic init alembic
# alembic revision --autogenerate -m "add users"
# alembic upgrade head
# alembic downgrade -1

1.3 Валидация

Библиотека Статус Почему
Pydantic v2 ✅ СТАНДАРТ Быстрый, интеграция с FastAPI
Pydantic v1 ❌ НЕТ Deprecated, медленнее
marshmallow ❌ НЕТ Для Flask, нет type hints
attrs ⚠️ Простые случаи Быстрый, но нет сериализации
dataclasses ⚠️ Внутренние модели Нет валидации
# Почему Pydantic v2:
# 1. В 5-50x быстрее v1
# 2. Type hints = документация
# 3. Автоматическая валидация в FastAPI
# 4. JSON Schema генерация

from pydantic import BaseModel, EmailStr, Field

class UserCreate(BaseModel):
    email: EmailStr
    password: str = Field(min_length=8)
    age: int = Field(ge=18, le=120)

1.4 Сериализация

Библиотека Статус Почему
orjson ✅ СТАНДАРТ В 10x быстрее stdlib json
ujson ⚠️ Альтернатива Быстрый, но меньше фич
json (stdlib) ⚠️ Совместимость Если нужна 100% совместимость
msgpack ⚠️ Бинарный Компактнее JSON, для внутренних API
# Почему orjson:
# 1. В 10x быстрее stdlib
# 2. Поддержка datetime, UUID, numpy
# 3. Строгий (не сериализует что попало)

import orjson

data = {"name": "test", "created": datetime.now()}
json_bytes = orjson.dumps(data)  # bytes
json_str = json_bytes.decode()   # str

1.5 Кэширование

Библиотека Статус Почему
Redis (redis-py async) ✅ СТАНДАРТ Быстрый, персистентный, pub/sub
aiocache ⚠️ Абстракция Единый API для разных бэкендов
cachetools ⚠️ In-memory Локальный кэш, TTL
memcached ❌ НЕТ Redis лучше по функционалу
# Почему Redis:
# 1. Персистентность (данные не теряются)
# 2. Pub/Sub для real-time
# 3. Структуры данных (lists, sets, hashes)
# 4. Кластеризация

import redis.asyncio as redis

r = redis.from_url("redis://localhost")
await r.set("key", "value", ex=3600)  # TTL 1 час
value = await r.get("key")

УРОВЕНЬ 2: БЕЗОПАСНОСТЬ

2.1 Хеширование паролей

Библиотека Статус Почему
passlib + bcrypt ✅ СТАНДАРТ Безопасный, проверенный
bcrypt ⚠️ Напрямую Если не нужна абстракция passlib
argon2-cffi ⚠️ Альтернатива Новее bcrypt, победитель PHC
hashlib ❌ НЕТ Не для паролей (нет salt, быстрый)
# Почему passlib:
# 1. Абстракция над алгоритмами
# 2. Автоматический upgrade хешей
# 3. Проверенный в production

from passlib.context import CryptContext

pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")

hashed = pwd_context.hash("password123")
is_valid = pwd_context.verify("password123", hashed)

2.2 JWT токены

Библиотека Статус Почему
python-jose ✅ СТАНДАРТ Полная поддержка JOSE, криптография
PyJWT ⚠️ Альтернатива Проще, но меньше алгоритмов
authlib ⚠️ Полный OAuth Если нужен полный OAuth стек
# Почему python-jose:
# 1. Поддержка RSA, EC ключей
# 2. JWS, JWE, JWK
# 3. Рекомендован FastAPI

from jose import jwt

token = jwt.encode({"sub": user_id}, SECRET_KEY, algorithm="HS256")
payload = jwt.decode(token, SECRET_KEY, algorithms=["HS256"])

2.3 OAuth2

Библиотека Статус Почему
FastAPI Security ✅ Встроенный OAuth2 схемы из коробки
fastapi-users ✅ Готовое решение Полный auth из коробки
authlib ⚠️ Кастомный OAuth OAuth провайдер, клиент
# FastAPI встроенный OAuth2:
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

@app.post("/token")
async def login(form: OAuth2PasswordRequestForm = Depends()):
    # Проверка, выдача токена
    pass

@app.get("/protected")
async def protected(token: str = Depends(oauth2_scheme)):
    # Защищённый endpoint
    pass

УРОВЕНЬ 3: БИЗНЕС-ЛОГИКА

3.1 Фоновые задачи

Библиотека Статус Когда Почему
BackgroundTasks ✅ Простые < 5 сек, fire-and-forget Встроенный в FastAPI
ARQ ✅ I/O задачи HTTP, email, файлы Async native, Redis
Celery ✅ CPU задачи Расчёты, обработка Надёжный, масштабируемый
Dramatiq ⚠️ Альтернатива Celery Проще Celery Хорошие defaults
Huey ⚠️ Лёгкий вариант Простые задачи Минималистичный
RQ ❌ НЕТ Медленный
ДЕРЕВО ВЫБОРА:

Задача < 5 сек, не критична?
├── ДА → BackgroundTasks
│
└── НЕТ → Нужен retry/статус?
          ├── НЕТ → BackgroundTasks
          │
          └── ДА → I/O или CPU?
                   ├── I/O → ARQ
                   └── CPU → Celery
# BackgroundTasks (простое)
from fastapi import BackgroundTasks

@app.post("/send-email")
async def send(bg: BackgroundTasks):
    bg.add_task(send_email, "user@example.com")
    return {"status": "queued"}

# ARQ (async задачи)
async def send_email(ctx, email: str):
    await smtp.send(email)

class WorkerSettings:
    functions = [send_email]
    redis_settings = RedisSettings()

3.2 Планировщик

Библиотека Статус Почему
APScheduler ✅ СТАНДАРТ Гибкий, cron, intervals
Celery Beat ⚠️ С Celery Если уже есть Celery
schedule ⚠️ Простой Минималистичный
cron (системный) ❌ НЕТ Вне Python, сложнее управлять
# Почему APScheduler:
# 1. Работает внутри приложения
# 2. Cron синтаксис
# 3. Персистентность (БД)

from apscheduler.schedulers.asyncio import AsyncIOScheduler

scheduler = AsyncIOScheduler()

@scheduler.scheduled_job('cron', hour=3)
async def nightly_task():
    await cleanup_old_data()

scheduler.start()

3.3 State Machines (FSM)

Библиотека Статус Почему
transitions ✅ СТАНДАРТ Гибкий, callbacks
python-statemachine ⚠️ Альтернатива Декларативный
if/else ❌ НЕТ Нечитаемо, баги
# Почему transitions:
# 1. Явные состояния и переходы
# 2. Callbacks на переходы
# 3. Валидация переходов

from transitions import Machine

class Order:
    states = ['new', 'paid', 'shipped', 'delivered', 'cancelled']

    def __init__(self):
        self.machine = Machine(model=self, states=Order.states, initial='new')
        self.machine.add_transition('pay', 'new', 'paid')
        self.machine.add_transition('ship', 'paid', 'shipped')
        self.machine.add_transition('deliver', 'shipped', 'delivered')
        self.machine.add_transition('cancel', ['new', 'paid'], 'cancelled')

order = Order()
order.pay()      # new → paid
order.ship()     # paid → shipped

УРОВЕНЬ 4: ИНТЕГРАЦИИ

4.1 HTTP клиент

Библиотека Статус Почему
httpx ✅ СТАНДАРТ Async + sync, HTTP/2, type hints
aiohttp ⚠️ Только async Быстрее httpx, но только async
requests ❌ НЕТ Sync, блокирует event loop
# Почему httpx:
# 1. Async native
# 2. HTTP/2 поддержка
# 3. API как у requests
# 4. Type hints

import httpx

# Async
async with httpx.AsyncClient() as client:
    response = await client.get("https://api.example.com")

# Sync (для скриптов)
response = httpx.get("https://api.example.com")

4.2 Retry логика

Библиотека Статус Почему
tenacity ✅ СТАНДАРТ Гибкий, декораторы, async
backoff ⚠️ Альтернатива Проще, но меньше фич
time.sleep ❌ НЕТ Блокирует, нет логики
# Почему tenacity:
# 1. Декоратор = минимум кода
# 2. Exponential backoff
# 3. Условия retry

from tenacity import retry, stop_after_attempt, wait_exponential

@retry(stop=stop_after_attempt(3), wait=wait_exponential(min=1, max=10))
async def call_api():
    async with httpx.AsyncClient() as client:
        response = await client.get(url)
        response.raise_for_status()
        return response.json()

4.3 Email

Библиотека Статус Почему
aiosmtplib ✅ Async SMTP Async native
fastapi-mail ✅ Простой API Jinja2 шаблоны, вложения
smtplib ⚠️ Sync Блокирует, но простой
# Почему fastapi-mail:
# 1. Jinja2 шаблоны для писем
# 2. Вложения
# 3. Async

from fastapi_mail import FastMail, MessageSchema, ConnectionConfig

conf = ConnectionConfig(
    MAIL_USERNAME="user",
    MAIL_PASSWORD="pass",
    MAIL_FROM="noreply@example.com",
    MAIL_SERVER="smtp.example.com"
)

message = MessageSchema(
    subject="Welcome",
    recipients=["user@example.com"],
    template_body={"name": "User"}
)

fm = FastMail(conf)
await fm.send_message(message, template_name="welcome.html")

4.4 Платежи

Библиотека Статус Почему
stripe ✅ Международный Лучший API, документация
yookassa ✅ Россия Официальный SDK ЮKassa
paypalrestsdk ⚠️ PayPal Если нужен PayPal
# Stripe
import stripe
stripe.api_key = "sk_..."

payment_intent = stripe.PaymentIntent.create(
    amount=1000,  # в копейках
    currency="rub"
)

# YooKassa
from yookassa import Payment

payment = Payment.create({
    "amount": {"value": "100.00", "currency": "RUB"},
    "confirmation": {"type": "redirect", "return_url": "https://..."},
    "description": "Заказ #123"
})

УРОВЕНЬ 5: ФАЙЛЫ

5.1 Файловая система

Библиотека Статус Почему
aiofiles ✅ Async I/O Не блокирует event loop
pathlib ✅ Пути Удобный API для путей
open() ❌ В async Блокирует event loop
# Почему aiofiles:
# 1. Async чтение/запись
# 2. Не блокирует

import aiofiles
from pathlib import Path

async def read_file(path: Path) -> str:
    async with aiofiles.open(path) as f:
        return await f.read()

5.2 S3 / Облако

Библиотека Статус Почему
aioboto3 ✅ AWS async Async обёртка над boto3
boto3 ⚠️ Sync Если async не нужен
minio ⚠️ MinIO Если используется MinIO
# Почему aioboto3:
# 1. Async операции
# 2. Полный API AWS

import aioboto3

session = aioboto3.Session()
async with session.client("s3") as s3:
    await s3.upload_file("local.txt", "bucket", "remote.txt")

5.3 Изображения

Библиотека Статус Почему
Pillow ✅ СТАНДАРТ Ресайз, конвертация, эффекты
opencv-python ⚠️ CV задачи Компьютерное зрение
ImageMagick ❌ НЕТ Внешняя зависимость
# Pillow — всё что нужно для изображений
from PIL import Image

img = Image.open("photo.jpg")
img.thumbnail((800, 600))
img.save("thumbnail.jpg", quality=85)

5.4 Excel / CSV

Библиотека Статус Почему
openpyxl ✅ Excel (.xlsx) Чтение и запись
xlsxwriter ⚠️ Только запись Быстрее для генерации
csv (stdlib) ✅ CSV Встроенный, достаточно
pandas ⚠️ Аналитика Если нужна обработка данных
# openpyxl для Excel
from openpyxl import load_workbook

wb = load_workbook("data.xlsx")
ws = wb.active
for row in ws.iter_rows(values_only=True):
    print(row)

5.5 PDF

Библиотека Статус Почему
reportlab ✅ Генерация Программная генерация PDF
pypdf ✅ Чтение Парсинг существующих PDF
weasyprint ⚠️ HTML → PDF Если есть HTML шаблон
pdfplumber ⚠️ Извлечение Таблицы из PDF

УРОВЕНЬ 6: REAL-TIME

6.1 WebSocket

Библиотека Статус Почему
FastAPI WebSocket ✅ Встроенный Нативная поддержка
websockets ⚠️ Низкоуровневый Если нужен контроль
Socket.IO ⚠️ Совместимость Если фронтенд на Socket.IO
# FastAPI WebSocket
from fastapi import WebSocket

@app.websocket("/ws/{user_id}")
async def websocket_endpoint(websocket: WebSocket, user_id: str):
    await websocket.accept()
    while True:
        data = await websocket.receive_text()
        await websocket.send_text(f"Received: {data}")

6.2 Server-Sent Events (SSE)

Библиотека Статус Почему
sse-starlette ✅ СТАНДАРТ Простой SSE для FastAPI
from sse_starlette.sse import EventSourceResponse

@app.get("/stream")
async def stream():
    async def event_generator():
        while True:
            yield {"data": "message"}
            await asyncio.sleep(1)
    return EventSourceResponse(event_generator())

УРОВЕНЬ 7: UI / FRONTEND

7.1 Шаблоны

Библиотека Статус Почему
Jinja2 ✅ СТАНДАРТ Мощный, расширяемый
Mako ⚠️ Альтернатива Быстрее, но менее популярен

7.2 Интерактивность (без JS фреймворков)

Библиотека Статус Почему
htmx ✅ СТАНДАРТ AJAX без JS кода
Alpine.js ✅ Простая логика Реактивность без сборки
<!-- htmx — AJAX без JavaScript -->
<button hx-post="/api/like" hx-swap="outerHTML">
    Like
</button>

<!-- Alpine.js — реактивность -->
<div x-data="{ count: 0 }">
    <button @click="count++">+</button>
    <span x-text="count"></span>
</div>

7.3 Админка

Библиотека Статус Почему
SQLAdmin ✅ SQLAlchemy Простая, современная
FastAPI-Amis-Admin ✅ Мощная Как Django Admin
Starlette-Admin ⚠️ Альтернатива Поддержка разных ORM
# SQLAdmin
from sqladmin import Admin, ModelView

admin = Admin(app, engine)

class UserAdmin(ModelView, model=User):
    column_list = [User.id, User.email, User.created_at]
    column_searchable_list = [User.email]

admin.add_view(UserAdmin)

УРОВЕНЬ 8: ТЕСТИРОВАНИЕ

8.1 Фреймворк

Библиотека Статус Почему
pytest ✅ СТАНДАРТ Фикстуры, плагины, параметризация
unittest ❌ НЕТ Verbose, устаревший стиль

8.2 Async тесты

Библиотека Статус Почему
pytest-asyncio ✅ СТАНДАРТ Async фикстуры и тесты
anyio ⚠️ Универсальный Если нужна совместимость trio

8.3 HTTP тесты

Библиотека Статус Почему
httpx.AsyncClient ✅ СТАНДАРТ Async, для FastAPI
TestClient ⚠️ Sync Если async не нужен
requests ❌ НЕТ Sync, блокирует

8.4 Моки

Библиотека Статус Почему
pytest-mock ✅ СТАНДАРТ Удобная обёртка
respx ✅ HTTP моки Моки для httpx
unittest.mock ⚠️ Stdlib Если не нужны зависимости
# Полный пример теста
import pytest
from httpx import AsyncClient, ASGITransport

@pytest.fixture
async def client():
    async with AsyncClient(
        transport=ASGITransport(app=app),
        base_url="http://test"
    ) as ac:
        yield ac

@pytest.mark.asyncio
async def test_create_user(client):
    response = await client.post("/users", json={"email": "test@test.com"})
    assert response.status_code == 200

УРОВЕНЬ 9: OBSERVABILITY

9.1 Логирование

Библиотека Статус Почему
structlog ✅ Production Структурированные логи, JSON
loguru ✅ Development Красивый вывод, простой API
logging (stdlib) ⚠️ Если нужно Стандартный, но verbose
print() ❌ НЕТ Непрофессионально
# loguru — для разработки
from loguru import logger
logger.info("Processing {count} items", count=42)

# structlog — для production
import structlog
log = structlog.get_logger()
log.info("processing", count=42, user_id=123)
# Вывод: {"event": "processing", "count": 42, "user_id": 123, "timestamp": "..."}

9.2 Метрики

Библиотека Статус Почему
prometheus-fastapi-instrumentator ✅ СТАНДАРТ Автоматические метрики
starlette-exporter ⚠️ Альтернатива Базовые метрики
from prometheus_fastapi_instrumentator import Instrumentator

app = FastAPI()
Instrumentator().instrument(app).expose(app)

# Метрики доступны на /metrics

9.3 Трейсинг

Библиотека Статус Почему
OpenTelemetry ✅ СТАНДАРТ Стандарт индустрии
Jaeger ⚠️ Бэкенд Хранение трейсов

УРОВЕНЬ 10: ИНФРАСТРУКТУРА

10.1 Контейнеризация

Инструмент Статус Почему
Docker ✅ СТАНДАРТ Изоляция, воспроизводимость
docker-compose ✅ Dev/Prod Оркестрация контейнеров
Kubernetes ⚠️ Enterprise Если нужно масштабирование
virtualenv ❌ Для prod Только для разработки

10.2 Reverse Proxy

Инструмент Статус Почему
Traefik ✅ СТАНДАРТ Автоконфигурация, Let's Encrypt
Nginx ⚠️ Классика Если уже используется
Caddy ⚠️ Альтернатива Простой, автоматический HTTPS

УРОВЕНЬ 11: DEV TOOLS

11.1 Линтер + Форматтер

Инструмент Статус Почему
ruff ✅ СТАНДАРТ Быстрый (Rust), всё в одном
black ⚠️ Только форматтер Если ruff не подходит
flake8 ❌ НЕТ ruff быстрее и мощнее
pylint ❌ НЕТ Медленный
# pyproject.toml
[tool.ruff]
line-length = 100
target-version = "py312"

[tool.ruff.lint]
select = ["E", "F", "I", "UP", "B"]

11.2 Type Checker

Инструмент Статус Почему
ty ✅ Новый стандарт Супербыстрый (Rust), от Astral
mypy ⚠️ Классика Если ty не подходит
pyright ⚠️ VS Code Если используется VS Code

11.3 Package Manager

Инструмент Статус Почему
uv ✅ СТАНДАРТ В 10-100x быстрее pip, от Astral
poetry ⚠️ Альтернатива Lock файлы, публикация
pip ⚠️ Fallback Если uv недоступен
# uv — новый стандарт
uv pip install fastapi
uv pip compile requirements.in -o requirements.txt
uv venv

СВОДНАЯ ТАБЛИЦА

Категория Стандарт Почему
Фреймворк FastAPI Async, документация, скорость
Сервер uvicorn + gunicorn Надёжность + производительность
Конфиг pydantic-settings Валидация, типы
ORM SQLAlchemy 2.0 async Мощный, гибкий
Миграции Alembic Автогенерация
Валидация Pydantic v2 Интеграция с FastAPI
JSON orjson Скорость
Кэш Redis Персистентность, pub/sub
Пароли passlib + bcrypt Безопасность
JWT python-jose Полная поддержка JOSE
Задачи (I/O) ARQ Async native
Задачи (CPU) Celery Надёжность
HTTP клиент httpx Async + sync
Retry tenacity Гибкость
Файлы aiofiles Async I/O
S3 aioboto3 Async AWS
Изображения Pillow Универсальность
Excel openpyxl Чтение + запись
WebSocket FastAPI Встроенный
Шаблоны Jinja2 Стандарт
Интерактивность htmx + Alpine.js Без сборки
Админка SQLAdmin Простота
Тесты pytest + httpx Async поддержка
Логи (dev) loguru Удобство
Логи (prod) structlog JSON, структура
Метрики Prometheus Стандарт
Линтер ruff Скорость
Types ty Скорость
Packages uv Скорость

Версия: 1.0.0