Python Экосистема — Полный каталог
Версия: 1.0.0
Дата: 2025-12-20
Статус: Справочник
НАЗНАЧЕНИЕ
Единый справочник по Python библиотекам. Один раз изучили → всегда используем.
КАТЕГОРИЯ 1: HTTP КЛИЕНТЫ
| Задача |
Стандарт |
Альтернатива |
НЕ использовать |
| Sync + Async |
httpx |
— |
requests |
| Только Async (макс. скорость) |
aiohttp |
— |
requests |
| Retry логика |
tenacity |
— |
time.sleep |
# СТАНДАРТ: httpx
import httpx
# Sync
response = httpx.get("https://api.example.com")
# Async
async with httpx.AsyncClient() as client:
response = await client.get("https://api.example.com")
Почему httpx: HTTP/2, async+sync, type hints, совместим с requests API.
КАТЕГОРИЯ 2: ВАЛИДАЦИЯ ДАННЫХ
| Задача |
Стандарт |
Альтернатива |
НЕ использовать |
| Валидация + сериализация |
Pydantic v2 |
— |
Pydantic v1 |
| Простые dataclass |
dataclasses |
attrs |
— |
| Схемы API |
Pydantic |
marshmallow |
— |
# СТАНДАРТ: Pydantic v2
from pydantic import BaseModel, ConfigDict
class User(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: int
name: str
email: str
Почему Pydantic v2: FastAPI интеграция, OpenAPI, быстрее v1.
КАТЕГОРИЯ 3: КОНФИГУРАЦИЯ
| Задача |
Стандарт |
Альтернатива |
НЕ использовать |
| Настройки приложения |
pydantic-settings |
dynaconf |
os.environ |
| .env файлы |
python-dotenv |
— |
ручной парсинг |
| Сложные конфиги |
dynaconf |
hydra |
ConfigParser |
# СТАНДАРТ: pydantic-settings
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
database_url: str
api_key: str
debug: bool = False
class Config:
env_file = ".env"
settings = Settings()
КАТЕГОРИЯ 4: ЛОГИРОВАНИЕ
| Задача |
Стандарт |
Альтернатива |
НЕ использовать |
| Простое логирование |
loguru |
— |
print() |
| Структурированные логи |
structlog |
— |
logging |
| Production |
structlog + JSON |
loguru |
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)
Рекомендация: loguru для разработки, structlog для production.
КАТЕГОРИЯ 5: CLI ИНСТРУМЕНТЫ
| Задача |
Стандарт |
Альтернатива |
НЕ использовать |
| CLI приложение |
Typer |
Click |
argparse |
| Простые скрипты |
argparse |
— |
sys.argv |
| Rich вывод |
rich |
— |
print() |
# СТАНДАРТ: Typer
import typer
app = typer.Typer()
@app.command()
def hello(name: str, count: int = 1):
for _ in range(count):
typer.echo(f"Hello {name}")
if __name__ == "__main__":
app()
Почему Typer: Type hints, автодополнение, от автора FastAPI.
КАТЕГОРИЯ 6: ОЧЕРЕДИ ЗАДАЧ
| Задача |
Стандарт |
Альтернатива |
НЕ использовать |
| Async I/O задачи |
ARQ |
TaskIQ |
RQ |
| CPU задачи |
Celery |
Dramatiq |
BackgroundTasks |
| Простые задачи |
Huey |
RQ |
Celery |
| Планировщик |
APScheduler |
Celery Beat |
cron |
ДЕРЕВО ВЫБОРА:
Задача < 5 сек?
├── ДА → BackgroundTasks (FastAPI встроенный)
│
└── НЕТ → Async или CPU?
├── Async (API, файлы) → ARQ + Redis
└── CPU (расчёты) → Celery + Redis
| Библиотека |
Скорость |
Сложность |
Broker |
| Huey |
⭐⭐⭐⭐⭐ |
Низкая |
Redis |
| Dramatiq |
⭐⭐⭐⭐⭐ |
Средняя |
Redis/RabbitMQ |
| ARQ |
⭐⭐⭐⭐ |
Низкая |
Redis |
| Celery |
⭐⭐⭐ |
Высокая |
Redis/RabbitMQ/SQS |
| RQ |
⭐⭐ |
Низкая |
Redis |
КАТЕГОРИЯ 7: БАЗЫ ДАННЫХ
SQL
| Задача |
Стандарт |
Альтернатива |
НЕ использовать |
| ORM (async) |
SQLAlchemy 2.0 |
SQLModel |
SQLAlchemy 1.x |
| Миграции |
Alembic |
— |
ручные SQL |
| PostgreSQL driver |
asyncpg |
psycopg3 |
psycopg2 |
| SQLite driver |
aiosqlite |
— |
sqlite3 |
NoSQL
| Задача |
Стандарт |
Альтернатива |
НЕ использовать |
| MongoDB (ODM) |
Beanie |
ODMantic |
PyMongo sync |
| MongoDB (driver) |
Motor |
— |
PyMongo sync |
| Redis |
redis-py (async) |
— |
redis sync |
# СТАНДАРТ: SQLAlchemy 2.0 async
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
engine = create_async_engine("postgresql+asyncpg://...")
class Base(DeclarativeBase):
pass
class User(Base):
__tablename__ = "users"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str]
КАТЕГОРИЯ 8: ТЕСТИРОВАНИЕ
| Задача |
Стандарт |
Альтернатива |
НЕ использовать |
| Фреймворк |
pytest |
— |
unittest |
| Async тесты |
pytest-asyncio |
anyio |
— |
| HTTP моки |
respx |
responses |
— |
| Фикстуры |
pytest fixtures |
— |
setUp/tearDown |
| Покрытие |
pytest-cov |
— |
— |
| Моки |
pytest-mock |
unittest.mock |
— |
# СТАНДАРТ: pytest + httpx
import pytest
from httpx import AsyncClient, ASGITransport
@pytest.fixture
async def client(app):
async with AsyncClient(
transport=ASGITransport(app=app),
base_url="http://test"
) as ac:
yield ac
@pytest.mark.asyncio
async def test_endpoint(client):
response = await client.get("/api/users")
assert response.status_code == 200
КАТЕГОРИЯ 9: РАБОТА С ФАЙЛАМИ
| Задача |
Стандарт |
Альтернатива |
НЕ использовать |
| Async файлы |
aiofiles |
— |
sync open() |
| Пути |
pathlib |
— |
os.path |
| Excel чтение |
openpyxl |
pandas |
xlrd |
| Excel запись |
openpyxl |
xlsxwriter |
— |
| CSV |
csv (stdlib) |
pandas |
— |
| JSON |
orjson |
ujson |
json |
| YAML |
ruamel.yaml |
PyYAML |
— |
| PDF генерация |
reportlab |
weasyprint |
— |
| PDF парсинг |
pypdf |
pdfplumber |
— |
# СТАНДАРТ: aiofiles + pathlib
import aiofiles
from pathlib import Path
async def read_file(path: Path) -> str:
async with aiofiles.open(path, mode='r') as f:
return await f.read()
КАТЕГОРИЯ 10: S3 / ОБЛАЧНЫЕ ХРАНИЛИЩА
| Задача |
Стандарт |
Альтернатива |
НЕ использовать |
| AWS S3 (async) |
aioboto3 |
— |
boto3 sync |
| AWS S3 (sync) |
boto3 |
— |
— |
| MinIO |
aioboto3 |
minio |
— |
# СТАНДАРТ: aioboto3
import aioboto3
async def upload_to_s3(file, bucket: str, key: str):
session = aioboto3.Session()
async with session.client("s3") as s3:
await s3.upload_fileobj(file, bucket, key)
КАТЕГОРИЯ 11: СЕРИАЛИЗАЦИЯ
| Задача |
Стандарт |
Альтернатива |
НЕ использовать |
| JSON (быстрый) |
orjson |
ujson |
json |
| JSON (совместимость) |
json |
— |
— |
| MessagePack |
msgpack |
— |
— |
| Pickle |
pickle |
— |
— |
# СТАНДАРТ: orjson
import orjson
data = {"name": "test", "value": 123}
json_bytes = orjson.dumps(data) # bytes
json_str = orjson.dumps(data).decode() # str
Почему orjson: В 10x быстрее stdlib json.
КАТЕГОРИЯ 12: ДАТА/ВРЕМЯ
| Задача |
Стандарт |
Альтернатива |
НЕ использовать |
| Работа с датами |
datetime (stdlib) |
pendulum |
arrow |
| Таймзоны |
zoneinfo (stdlib) |
pytz |
— |
| Парсинг дат |
dateutil |
— |
strptime |
# СТАНДАРТ: datetime + zoneinfo
from datetime import datetime
from zoneinfo import ZoneInfo
now_utc = datetime.now(ZoneInfo("UTC"))
now_moscow = now_utc.astimezone(ZoneInfo("Europe/Moscow"))
КАТЕГОРИЯ 13: ШАБЛОНЫ
| Задача |
Стандарт |
Альтернатива |
НЕ использовать |
| HTML шаблоны |
Jinja2 |
— |
Django templates |
| Простые строки |
f-strings |
— |
% formatting |
КАТЕГОРИЯ 14: ПАРСИНГ HTML
| Задача |
Стандарт |
Альтернатива |
НЕ использовать |
| HTML парсинг |
BeautifulSoup4 |
lxml |
regex |
| XPath |
lxml |
parsel |
— |
| CSS селекторы |
BeautifulSoup4 |
parsel |
— |
КАТЕГОРИЯ 15: ИЗОБРАЖЕНИЯ
| Задача |
Стандарт |
Альтернатива |
НЕ использовать |
| Обработка |
Pillow |
— |
ImageMagick |
| Ресайз |
Pillow |
— |
— |
| Конвертация |
Pillow |
— |
— |
КАТЕГОРИЯ 16: КРИПТОГРАФИЯ
| Задача |
Стандарт |
Альтернатива |
НЕ использовать |
| Хеширование паролей |
passlib |
bcrypt |
hashlib |
| JWT |
python-jose |
PyJWT |
самописное |
| Шифрование |
cryptography |
— |
PyCrypto |
| Секреты |
secrets (stdlib) |
— |
random |
# СТАНДАРТ: passlib
from passlib.context import CryptContext
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
def hash_password(password: str) -> str:
return pwd_context.hash(password)
def verify_password(plain: str, hashed: str) -> bool:
return pwd_context.verify(plain, hashed)
КАТЕГОРИЯ 17: ТЕРМИНАЛ / ВЫВОД
| Задача |
Стандарт |
Альтернатива |
НЕ использовать |
| Красивый вывод |
rich |
— |
print() |
| Прогресс бар |
rich / tqdm |
— |
print() |
| Таблицы |
rich |
tabulate |
— |
| Цвета |
rich |
colorama |
ANSI коды |
# СТАНДАРТ: rich
from rich.console import Console
from rich.table import Table
console = Console()
table = Table(title="Users")
table.add_column("ID")
table.add_column("Name")
table.add_row("1", "Alice")
console.print(table)
КАТЕГОРИЯ 18: ASYNC УТИЛИТЫ
| Задача |
Стандарт |
Альтернатива |
НЕ использовать |
| Event loop |
uvloop |
— |
asyncio default |
| Concurrency |
asyncio.gather |
— |
threading |
| Semaphore |
asyncio.Semaphore |
— |
— |
# СТАНДАРТ: uvloop
import uvloop
uvloop.install() # Ускоряет asyncio в 2-4x
КАТЕГОРИЯ 19: ВНЕШНИЕ API
| Задача |
Стандарт |
Альтернатива |
НЕ использовать |
| Telegram |
python-telegram-bot |
aiogram |
telethon |
| Email |
aiosmtplib |
smtplib |
— |
| AWS |
aioboto3 |
boto3 |
— |
| Задача |
Стандарт |
Альтернатива |
НЕ использовать |
| Линтер |
ruff |
flake8 |
pylint |
| Форматтер |
ruff format |
black |
autopep8 |
| Type checker |
ty / mypy |
pyright |
— |
| Pre-commit |
pre-commit |
— |
— |
| Версионирование |
uv |
poetry |
pip |
# СТАНДАРТ: pyproject.toml + ruff
[tool.ruff]
line-length = 100
target-version = "py312"
[tool.ruff.lint]
select = ["E", "F", "I", "UP"]
BLACKLIST (НЕ ИСПОЛЬЗОВАТЬ)
| Библиотека |
Причина |
Замена |
| Streamlit |
Не используем |
FastAPI + Jinja2 |
| requests |
Sync only |
httpx |
| SQLAlchemy 1.x |
Legacy |
SQLAlchemy 2.0 |
| Pydantic v1 |
Deprecated |
Pydantic v2 |
| flask |
Sync, legacy |
FastAPI |
| django |
Другой стек |
FastAPI |
| celery (для I/O) |
Overkill |
ARQ |
| print() |
Непрофессионально |
loguru/structlog |
| os.environ |
Нет валидации |
pydantic-settings |
| json (stdlib) |
Медленный |
orjson |
ССЫЛКИ
Awesome Lists
Best Practices
Версия: 1.0.0