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

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

Continuous Integration (CI) , Giga, Python. Code Format

Continuous Integration (CI) , Giga, Python. Code Format

https://giga.chat/link/gcsObBTGeV

Continuous Integration (CI) — это практика регулярного объединения изменений кода, сделанных разными разработчиками, в общий репозиторий,

сопровождаемая автоматическими действиями, такими как сборка, тестирование и верификация кода. Pipeline triggers — это события,

запускающие выполнение CI-пайплайнов (например, отправка коммита, pull request, запланированное задание и т.д.).

Что такое pipeline triggers?

Pipeline triggers — это условия, которые вызывают запуск конвейера CI/CD. Наиболее распространены следующие виды триггеров:

  1. Push-triggered pipelines: Запускаются после отправки изменений в репозиторий (push).
  2. Pull-request triggered pipelines: Запускаются при создании или обновлении pull request’а.
  3. Scheduled pipelines: Автоматически запускаются по расписанию (например, ежедневно или еженедельно).
  4. Manual triggers: Ручной запуск пайплайна администратором или членом команды.
  5. External events: Внешние события, такие как Webhook-запросы или уведомления от других сервисов.

Примеры использования pipeline triggers:

Push-triggered pipeline:

Самый распространённый случай — запуск CI-пайплайна после push в репозиторий. Например, в GitLab CI:

job:
  stage: test
  script:
    - pytest
  rules:
    - if: '$CI_COMMIT_BRANCH'
      when: always

Этот пайплайн будет запущен всякий раз, когда произойдёт push в любую ветку.

Pull-request triggered pipeline:

Если вы хотите запускать пайплайн только при открытии PR’а, используйте соответствующий trigger:

job:
  stage: test
  script:
    - pytest
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
      when: always

Такой пайплайн будет запускаться только при событии открытия или обновления pull request’а.

Scheduled pipeline:

Регулярные проверки полезны для долгосрочных проектов или постоянных проверок целостности:

nightly_test:
  stage: test
  script:
    - pytest
  schedule:
    cron: "0 0 * * *"
    timezone: UTC

Этот пайплайн будет запускаться ежедневно в полночь по UTC.

Важность правильной настройки триггеров:

  • Эффект экономии времени: Правильно настроенные триггеры позволят вам вовремя обнаружить проблемы и
  • предупредить появление регрессий.
  • Производительность: Ограничивайте запуск пайплайнов только теми случаями, когда это действительно необходимо.
  • Нагрузка на сервер: Избегайте чрезмерного запуска пайплайнов, чтобы не перегружать ресурсы сервера.

Заключение:

Pipeline triggers — важная составляющая процесса CI/CD,

позволяющая эффективно запускать автоматические задачи в нужное время и при необходимом условии.

Их грамотная настройка помогает улучшить качество и стабильность разработки,

минимизируя риск человеческих ошибок и упущений.

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>.

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

Ruff, Giga, Python. Code Format, Tools

Ruff, Giga, Python. Code Format, Tools

https://giga.chat/link/gcsObBTGeV

Ruff — это ультрабыстрый Python-linter и форматировщик, разработанный компанией Astral, создателями известного анализатора кода Pyright.

Проект начал развиваться в мае 2023 года и быстро набрал популярность благодаря своей скорости и обширному набору правил.

Основные характеристики Ruff:

  1. Производительность:
  2. Одной из главных отличительных черт Ruff является его невероятная скорость.
  3. За счёт нативной реализации на Rust и параллельной обработки,
  4. Ruff способен обрабатывать миллионы строк кода за считанные секунды.
  5. Богатый набор правил:
  6. Ruff поддерживает сотни правил, покрывающих различные аспекты Python-кода:
  7. стиль, безопасность, лучшие практики, совместимость и прочее.
  8. Правила можно выбирать индивидуально, учитывая потребности проекта.
  9. Автоисправление:
  10. Помимо анализа кода, Ruff автоматически исправляет большинство найденных проблем, приводя код к нужному стилю и уровню качества.
  11. Интеграция: Ruff легко встраивается в рабочий процесс разработчиков. Он отлично работает с такими инструментами, как Git hooks,
  12. CI/CD-системами и популярными IDE (например, VSCode, PyCharm).
  13. Простота использования:
  14. Начав пользоваться Ruff,
  15. разработчики получают мощный инструмент с минимальным количеством настроек и быстрым вводом в эксплуатацию.

Краткое руководство по началу работы с Ruff:

1. Установка:

Установить Ruff можно с помощью pip:

pip install ruff

2. Запуск:

Проверить и исправить код можно с помощью одной команды:

ruff check .

3. Автоисправление:

Чтобы автоматически исправить все возможные проблемы:

ruff check --fix .

4. Конфигурация:

Ruff можно сконфигурировать через файл .ruff.toml, где можно задать индивидуальные предпочтения по поводу того,

какие правила включить или исключить:

[lint]
select = ["ALL"]  # выбираем все правила
ignore = ["F401"]  # игнорируем ненужные нам правила

Типичные правила Ruff:

  • E*: Нарушения стиля (например, излишний отступ, неправильно расставленные пробелы).
  • F*: Найденные проблемы (например, неиспользованная переменная, недопустимый оператор).
  • B*: Безопасность (например, небезопасные операции ввода-вывода).
  • R*: Производительность (например, медленная операция, неэффективный алгоритм).

Почему стоит использовать Ruff?

  • Высокая скорость: Даже на больших проектах обработка проходит молниеносно.
  • Большой охват правил: Покрывает почти все популярные рекомендации по качеству кода.
  • Автономность: Ruff не требует специальных плагинов или дополнительного окружения.
  • Легкость адаптации: Быстрая интеграция в любой проект и рабочий процесс.

Заключение:

Ruff — это быстрый и мощный инструмент для Python-разработчиков,

сочетающий в себе высокую производительность, обширный набор правил и удобное автоисправление.

Благодаря простоте настройки и эксплуатации, он быстро набирает популярность среди профессионалов,

которым важно качество и быстрота.

PyUpgrade, Giga, Python. Code Format, Tools

PyUpgrade, Giga, Python. Code Format, Tools

https://giga.chat/link/gcsObBTGeV

PyUpgrade — это инструмент, предназначенный для автоматического преобразования старого Python-кода в соответствии с

последними изменениями синтаксиса и лучшей практикой.

Он фокусируется на замене устаревших конструкций и функций, поддерживая переход на новейшую версию Python.

Зачем нужен PyUpgrade?

  • Автоматизация миграций:
  • Облегчает модернизацию кода,
  • превращая старую версию Python (например, Python 2.x или ранние версии Python 3.x) в современную версию Python 3.
  • Очистка кода:
  • Устраняет использование устаревших идиом и конструкций, снижая техническое отставание.
  • Совместимость с будущими версиями:
  • Готовит код к возможным будущим изменениям в Python.

Принцип работы PyUpgrade:

PyUpgrade сканирует код и преобразовывает его в соответствии с современными рекомендациями.

Например, он может заменить старое выражение print() на новое или обновить конструкцию условных выражений.

Вот некоторые изменения, которые выполняет PyUpgrade:

  • Замена старых вариантов записи с точки зрения совмещения с Python 3.
  • Приведение синтаксиса к современному виду.
  • Улучшение читаемости и совместимости с новыми версиями Python.

Пример использования PyUpgrade:

Предположим, у вас есть файл с устаревшим синтаксисом:

print "Hello, World!"

После прохождения через PyUpgrade он изменится на:

print("Hello, World!")

Начало работы с PyUpgrade:

1. Установка:

pip install pyupgrade

2. Применение:

Применение PyUpgrade к целевому файлу или проекту:

pyupgrade --py3-plus *.py

Флаги:

  • --py3-plus: Модифицирует код для совместимости с Python 3+.
  • --keep-runtime-todos: Оставляет TODO-заметки в комментариях, чтобы отметить изменения, сделанные инструментом.

3. Результат:

После запуска PyUpgrade ваш код будет модернизирован в соответствии с современным синтаксисом Python.

Типичные изменения, вносимые PyUpgrade:

  • Изменение выражений с print().
  • Замена устаревших операторов сравнения (<>!=).
  • Преобразование цепочки условий (except ExceptionType, e:except ExceptionType as e:).
  • Автоматическое обновление оператора деления (/// для целочисленного деления).

Почему PyUpgrade полезен?

  • Экономия времени: Меньше ручной работы по модернизации кода.
  • Минимизация риска: Исчезновение ошибок, связанных с изменением синтаксиса.
  • Лучшее качество кода: Чистый и современный код соответствует последним рекомендациям сообщества Python.

Заключение:

PyUpgrade — ценный инструмент для разработчиков,

которые хотят перейти на последнюю версию Python или привести свой код в соответствие с лучшими практиками.

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

MyPy, Giga, Python. Code Format, Tools

MyPy, Giga, Python. Code Format, Tools

https://giga.chat/link/gcsObBTGeV

MyPy — это инструмент для статической проверки типов в Python,

который проверяет правильность использования аннотаций типов в вашем коде.

Поскольку Python изначально является языком с динамической типизацией,

MyPy позволяет вводить типизацию, подобную статическим языкам, что помогает предотвращать ошибки,

связанные с неверными типами данных.

Зачем нужен MyPy?

  1. Повышение надёжности:
  2. Раннее выявление ошибок, связанных с типом данных, увеличивает уверенность в правильности кода.
  3. Улучшенная документация:
  4. Аннотации типов улучшают читаемость и понимаемость кода, делая его проще для последующих модификаций.
  5. Скорость разработки:
  6. Благодаря подсказкам от MyPy вы получаете мгновенное уведомление о потенциальных проблемах, экономя время на диагностику.
  7. Поддержка IDE:
  8. Многие интегрированные среды разработки (IDE) понимают аннотации типов и показывают предупреждения,
  9. основанные на проверке MyPy.

Как работает MyPy?

MyPy сканирует код и проверяет, соответствуют ли фактические типы объявленным аннотациям.

Например, рассмотрим следующий фрагмент кода:

def greet(name: str) -> None:
    print(f"Hello, {name}")

greet(123)  # ошибка типа

MyPy выдаст предупреждение о том, что аргумент name должен быть строкой, а передан int.

Начало работы с MyPy:

1. Установка:

pip install mypy

2. Написание аннотированного кода:

Добавьте аннотации типов в свой код:

def double(x: float) -> float:
    return x * 2

3. Запуск MyPy:

Выполните проверку вашего кода с помощью MyPy:

mypy my_file.py

4. Использование MyPy с большими проектами:

Рекомендуется настроить MyPy в своём проекте, добавив конфигурационный файл mypy.ini или .mypirc.

Там можно указать различные настройки (например, разрешить пропуска необъявленных типов, игнорировать несуществующие модули и т.д.).

Примеры сообщений от MyPy:

  • Ошибка типа: Argument 1 to "greet" has incompatible type "int"; expected "str".
  • Несоответствие возвращаемого типа: Return value of function "double" has incompatible type "float"; expected "int".

Интеграция с редакторами:

MyPy хорошо интегрируется с популярными IDE, такими как VSCode, PyCharm и другими.

Он выводит ошибки прямо в редакторе, облегчая немедленное исправление проблем.

Ограничения MyPy:

Несмотря на большую полезность, MyPy имеет несколько ограничений:

  • Невозможность обнаружения ошибок, вызванных динамическими особенностями Python (например, runtime полиморфизм).
  • Тяжело применить к унаследованному коду без аннотаций типов.
  • Медленнее проверяет большие проекты по сравнению с динамическим анализом.

Заключение:

MyPy — важный инструмент для современного Python-разработчика, позволяющий своевременно ловить ошибки,

улучшать качество кода и облегчать взаимодействие с ним.

Его широкое распространение подтверждает важность статической типизации в Python-разработке.