Материал

Старт работ

Самостоятельное задание: окружение Python-проекта

Нужно с нуля подготовить окружение для собственного публичного Python-проекта. Задание не зависит от других домашних работ.

Репозиторий

Заведи аккаунт на GitHub и создай первый репозиторий.

Настрой SSH-ключ

SSH-ключ позволяет безопасно работать с GitHub из командной строки без постоянного ввода логина и пароля. Следуй официальной инструкции GitHub.

Git

Установи Git и клонируй созданный репозиторий. Проверь, что умеешь создавать ветки, фиксировать изменения коммитами, получать обновления и отправлять свою ветку на GitHub. Базовые команды описаны в Git Reference.

Среда разработки

Линтеры, форматтеры и статический анализ экономят время на рутинных проверках. Зависимости каждого проекта должны устанавливаться в отдельное виртуальное окружение.

Версия Python и виртуальное окружение

pyenv помогает устанавливать и выбирать версии Python. Само виртуальное окружение можно создать встроенным модулем venv либо менеджером проекта, например Poetry или uv. Это разные задачи: pyenv выбирает интерпретатор, а venv, Poetry или uv изолируют зависимости проекта.

Менеджер проекта и зависимостей

Poetry управляет метаданными проекта, зависимостями, lock-файлом, сборкой и публикацией пакетов. В новых проектах также часто используют uv. Выбери один инструмент и зафиксируй его в README проекта.

pre-commit

pre-commit запускает настроенные hooks перед коммитом или вручную. Через него удобно запускать форматтер, линтер и другие быстрые проверки на изменённых файлах.

Ruff и isort

Ruff — быстрый линтер и форматтер Python; он также умеет проверять и сортировать импорты. В существующих проектах для сортировки импортов может отдельно использоваться isort.

Black

Black — opinionated-форматтер Python-кода. Он уменьшает количество споров об оформлении и делает форматирование воспроизводимым.

Pylint

Pylint выполняет статический анализ Python-кода и проверяет широкий набор потенциальных ошибок и соглашений. Это не интерпретатор и не полная проверка соответствия всем PEP.

mypy

mypy — статический анализатор типов. Python остаётся динамически типизированным языком, а аннотации типов и mypy помогают раньше находить несогласованности и документировать контракты кода.

Flake8

Flake8 объединяет проверки PyFlakes, pycodestyle и McCabe. Он по-прежнему поддерживается и встречается в существующих проектах, хотя в новых конфигурациях его часто заменяет Ruff.

Практическая часть

  1. Создай минимальный пакет или приложение с одной функцией и одним тестом.
  2. Выбери один способ управления окружением и зависимостями: venv + pip, Poetry или uv.
  3. Настрой форматирование и линтинг. Не нужно одновременно подключать Ruff, Black, isort, Pylint и Flake8: выбери небольшой согласованный набор и объясни его в README.
  4. Добавь type hints и настрой mypy, если он входит в выбранный набор проверок.
  5. Подключи pre-commit и проверь весь репозиторий командой pre-commit run --all-files.
  6. Добавь .gitignore и .env.example; локальное окружение и реальные секреты не коммить.

Критерии готовности

  • репозиторий клонируется и настраивается по README;
  • версия Python и зависимости зафиксированы выбранным инструментом;
  • тест запускается локально;
  • форматтер, линтер и выбранная проверка типов проходят без ошибок;
  • pre-commit запускает заявленные проверки;
  • в репозитории нет .venv, локального .env, токенов и паролей.