Показаны сообщения с ярлыком Makefile. Показать все сообщения
Показаны сообщения с ярлыком Makefile. Показать все сообщения

четверг, 26 июня 2025 г.

Woorkflow, VsCode, Gitlab, CI, Giga, Makefile

Woorkflow, VsCode, Gitlab, CI, Giga, Makefile

https://giga.chat/link/gcsWxJqDsl

I. ЛОКАЛЬНАЯ РАБОТА (VSCode):

Интеграция инструментов в VSCode поможет тебе получать немедленную обратную связь и

автоматически исправлять ошибки,

делая код чище и качественнее.

Настройка VSCode:

  1. Форматирование с помощью Black:
    • Скачай расширение Python от Microsoft (официальное).
    • В настройках (Ctrl + ,) найди раздел Python > Formatting: Provider и выбери Black.
    • Теперь при сохранении файла (Ctrl+S) или нажатии сочетания клавиш (Shift+Alt+F)
    • код будет автоматически переформатирован.
  2. Автоформатирование на сохранение:
    • Включить автоприменение форматирования при сохранении можно,
    • включив опцию Editor: Format On Save.
  3. Linter (flake8):
    • Тот же самый Python extension поддерживает встроенный линтер Flake8.
    • Настройте его в VSCode, найдя раздел Python > Linting: Engine и выберите Flake8.
    • Сразу увидите предупреждения и ошибки в коде, не покидая редактор.
  4. Type Checking (mypy & pyright):
    • Есть официальные расширения для VSCode для mypy и pyright.
    • Эти расширения предоставляют статическую проверку типов прямо в редакторе,
    • выделяя ошибки и несоответствия.
  5. Импорт Sorter (isort):
    • Isort можно запускать вручную, но для постоянного эффекта можно подключить через форматирование.
    • Через настройки VSCode (Python > Formatting: Additional Arguments)
    • можно задать аргументы для запуска isort совместно с Black.

II. НАСТРОЙКА CI НА GITLAB:

Работа с CI (Continuous Integration) полезна для того, чтобы постоянно следить за качеством кода,

даже когда изменения вносятся несколькими людьми.

Конфигурация .gitlab-ci.yml:

Рассмотрим настройку CI с учётом инструментов, которые ты упомянул.

image: python:3.12-slim-buster

before_script:
  - pip install poetry
  - poetry config virtualenvs.create false
  - poetry install --no-root

stages:
  - lint
  - format
  - type-check

format-code:
  stage: format
  script:
    - poetry run black src/annotation_ci_proj
    - poetry run isort src/annotation_ci_proj

type-check-mypy:
  stage: type-check
  script:
    - poetry run mypy src/annotation_ci_proj

type-check-pyright:
  stage: type-check
  script:
    - poetry run pyright src/annotation_ci_proj

lint-check:
  stage: lint
  script:
    - poetry run flake8 src/annotation_ci_proj

Подробности по каждому шагу:

  1. Stage: format:
    • Запускает Black и isort для переформатирования и очистки импорта.
    • Если найденные изменения значительные, то лучше остановить билд и попросить автора поправить код вручную.
  2. Stage: type-check:
    • Параллельный запуск mypy и pyright для проверки аннотаций типов.
    • Это помогает поймать ошибки раньше и увеличить уверенность в работоспособности кода.
  3. Stage: lint:
    • Запуск Flake8 для обнаружения стилистических ошибок и плохого кода.

III. Автоматика и стратегия работы:

Лучше всего комбинировать оба подхода:

  • Местная разработка (VSCode): быстрое получение обратной связи и автоисправления.
  • GitLab CI: регулярная проверка при каждом коммите или пушинге, гарантирующая высокий уровень качества кода.

IV. Алгоритм дальнейших действий:

  1. Подготовь .gitignore,
  2. чтобы сохранять чистые локальные изменения
  3. (не допускать попадания временных файлов).
  4. Настрой Makefile для локального запуска всех инструментов сразу:
.PHONY: clean lint types help help: @echo "Available commands:" @echo " make clean Remove all generated files" @echo " make lint Run linters on the project" @echo " make types Check type annotations using mypy/pyright" clean: poetry lock --no-update poetry cache clear --all lint: poetry run flake8 src/annotation_ci_proj types: poetry run mypy src/annotation_ci_proj poetry run pyright src/annotation_ci_proj

  1. Запускай локально через Makefile:
make lint
make types

Заключение:

Такое сочетание локальной интеграции в VSCode и постоянной проверки через CI гарантирует,

что твой код будет оставаться качественным, красивым и безопасным для будущих модификаций.

понедельник, 2 июня 2025 г.

Makefile, Giga, Python. Code Format, Tools

Makefile, Giga, Python. Code Format, Tools

https://giga.chat/link/gcsObBTGeV

Makefile — это инструмент, традиционно используемый в Unix-системах для автоматизации процессов сборки и выполнения различных задач.

В контексте Python-разработки Makefile помогает автоматизировать часто повторяющиеся операции, такие как установка зависимостей,

запуск тестов, очистка временной информации и подготовка документаций.

Зачем нужен Makefile для Python?

Разработчики нередко сталкиваются с необходимостью выполнения одних и тех же задач снова и снова. Например:

  • Установка зависимостей (pip install -r requirements.txt)
  • Запуск тестов (pytest)
  • Генерация документации (sphinx-build)
  • Очистка временных файлов (find . -name "__pycache__" -delete)

Все эти задачи можно собрать в Makefile, сделав их доступными через простые команды вида make install, make test, make clean и т.д.

Как составить хороший Makefile для Python?

Makefile состоит из заданий (targets), каждое из которых связано с набором команд. Пример простого Makefile для Python-проекта:

.PHONY: help install test clean docs

help:
    @echo "Available commands:"
    @echo "  install - Install dependencies"
    @echo "  test    - Run unit tests"
    @echo "  clean   - Remove temporary files"
    @echo "  docs    - Generate documentation"

install:
    pip install -r requirements.txt

test:
    pytest

clean:
    find . -type d -name "__pycache__" -exec rm -rf {} +
    find . -type f -name "*.py[cod]" -delete

docs:
    sphinx-build -b html docs/source docs/build/html

Объяснение примеров:

  • help: Первая цель должна показывать список доступных команд.
  • install: Устанавливает зависимости из файла requirements.txt.
  • test: Запускает тесты с помощью pytest.
  • clean: Очищает временные файлы, созданные при компиляции и тестировании.
  • docs: Генерирует HTML-документацию с помощью Sphinx.

Совет по созданию Makefile:

  • Четкие названия: Выбирайте информативные и однозначные названия целей.
  • Краткость: Сделайте команды короткими и выразительными.
  • Последовательность: Располагайте задачи в логическом порядке.
  • Зависимости: Используйте зависимости между целями, если одна задача должна зависеть от результатов другой.

Распространённая практика:

Часто встречающиеся цели в Makefile для Python-проектов:

  • install: Установка зависимостей.
  • dev_install: Установка зависимостей для разработки.
  • format: Форматирование кода (например, с помощью Black или Ruff).
  • lint: Запуск линтеров (например, Flake8 или Ruff).
  • test: Запуск тестов (например, с помощью Pytest).
  • coverage: Генерация отчёта о покрытии кода тестами.
  • clean: Очистка временных файлов.
  • dist: Пакетирование проекта (создание колес, архива).

Заключение:

Makefile — это замечательный инструмент для автоматизации рутинных задач в Python-разработке.

Он позволяет сэкономить массу времени и усилий, сведя регулярные операции к простым командам вида make <target>.

Созданный однажды, такой файл надолго останется полезным ресурсом в любом крупном проекте.

---------------------------

Зачем использовать Makefile в Python?

Рассмотрим частые действия, которые разработчики выполняют ежедневно:

  • Установка зависимостей (pip install -r requirements.txt);
  • Запуск тестов (pytest);
  • Генерация документации (sphinx-build);
  • Очистка временного мусора (rm -rf __pycache__).

Каждая из этих задач может быть выполнена отдельно, но зачем тратить время на постоянное переключение между терминалом и командой,

если можно воспользоваться удобной системой Makefile?

Пример простого Makefile для Python:

Давайте создадим простой Makefile, который автоматизирует наши типичные задачи:

.PHONY: help install test clean format lint docs

help:
    @echo "Usage:"
    @echo "	make install          Install dependencies"
    @echo "	make test             Run unit tests"
    @echo "	make clean            Clean generated files"
    @echo "	make format           Format code using Black"
    @echo "	make lint             Lint code using Ruff"
    @echo "	make docs             Build documentation"

install:
    pip install -r requirements.txt

test:
    pytest

clean:
    find . -type d -name "__pycache__" -exec rm -rf {} +
    find . -type f -name "*.py[cod]" -delete

format:
    black .

lint:
    ruff .

docs:
    sphinx-build -b html docs/source docs/build/html

Объяснение примера:

  • help: первая цель должна выводить список доступных команд.
  • install: устанавливает зависимости из файла requirements.txt.
  • test: запускает тесты с помощью pytest.
  • clean: очищает временные файлы, созданные при компиляции и тестировании.
  • format: форматирует код с помощью Black.
  • lint: проверяет код с помощью Ruff.
  • docs: генерирует HTML-документацию с помощью Sphinx.

Совет по созданию Makefile:

  • Называйте цели понятно и однозначно.
  • Сокращайте команды до минимума, оставляя лаконичные и эффективные действия.
  • Расположите задачи в логическом порядке.
  • Определите зависимости между задачами, если одна зависит от другой.

Распространённые задачи в Makefile для Python:

  • install: установка зависимостей.
  • dev_install: установка зависимостей для разработки.
  • format: форматирование кода.
  • lint: проверка стиля и качества кода.
  • test: запуск тестов.
  • coverage: отчёт о покрытии кода тестами.
  • clean: очистка временных файлов.
  • dist: создание распределительного пакета.

Заключение:

Makefile — это превосходный помощник для разработчиков Python, позволяющий экономить время и силы,

сводя повторяющиеся действия к короткой команде make <task>.

Однажды созданный, такой файл навсегда остается ценным ресурсом для каждого крупного проекта.

воскресенье, 1 июня 2025 г.

Makefile, Giga, Tools

Makefile, Giga, Tools

https://giga.chat/link/gcsJhXtnzn Python, Project Structure

Makefile — это инструмент, используемый для автоматизации задач и последовательностей действий в Unix-подобных системах.

Он позволяет описать шаги выполнения определённой задачи и объединить их в единое целое,

упрощая доступ к повторяющимся действиям, таким как сборка проекта, тестирование,

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

Makefile удобен тем, что:

  • Позволяет избежать многократного ввода одних и тех же команд.
  • Гарантирует последовательность шагов при выполнении заданий.
  • Может использоваться как основа для автоматизации более сложных сценариев.

Структура Makefile:

Makefile состоит из целей (targets), правил и зависимостей.

Цель описывает конечный результат, который надо достичь, а правило определяет шаги для её выполнения.

Простой пример Makefile:

.PHONY: clean build test

clean:
    rm -rf dist *.pyc __pycache__

build:
    python setup.py sdist bdist_wheel

test:
    pytest tests/

Объяснение компонентов:

  • .PHONY:: эта директива показывает цели, которые не соответствуют физическим файлам, а представляют абстрактные действия.
  • цели (clean, build, test): каждая цель соответствует конкретной задаче, которую необходимо выполнить.
  • правила: определяют команды, которые будут выполнены при достижении каждой цели.

Примеры полезных целей:

  1. Очистка мусора (clean):
clean:
    find . -name '*.pyc' -delete
    find . -name '__pycache__' -exec rm -rf {} +
  1. Собрать дистрибутив (build):
build:
    python setup.py sdist bdist_wheel
  1. Провести тесты (test):
test:
    pytest tests/
  1. Проверка стиля кода (check-style):
check-style:
    ruff check .
    isort --check-only .
  1. Запустить линтер (lint):
lint:
    mypy .
    flake8 .
  1. Развёртывание (deploy):
deploy:
    twine upload dist/*

Преимущества использования Makefile:

  • Консистенция: единая точка входа для общих действий.
  • Скорость: быстрое выполнение регулярных задач без необходимости запоминания команд.
  • Масштабируемость: легко расширить набором новых задач по мере роста проекта.

Итоги:

Makefile — ценный инструмент для систематизации и ускорения регулярного выполнения задач в рамках проекта.

Его грамотное использование существенно облегчит жизнь разработчику, сэкономив время и уменьшив вероятность случайных ошибок.