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