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

понедельник, 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>.

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

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-разработке.

isort, Giga, Python. Code Format, Tools

isort, Giga, Python. Code Format, Tools

https://giga.chat/link/gcsObBTGeV

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

Главная цель isort — поддерживать чистоту и организованность импорта, что крайне важно для больших проектов,

где правильное расположение импортов может облегчить чтение и сопровождение кода.

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

  • Организация импорта: Разделяет импорт на категории (стандартные библиотеки, сторонние библиотеки,
  • внутренние модули), сортируя их в алфавитном порядке.
  • Устранение хаоса: Избавляется от повторяющихся импортов, неподключенных модулей и
  • неправильного расположения блоков импорта.
  • Соответствие стандарту: Соблюдение принципов PEP 8 и других рекомендованных стандартов.

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

Isort берёт существующий Python-файл и реорганизует блоки импорта в чётком и логичном порядке.

Процесс разделения включает:

  1. Импорты стандартных библиотек (stdlib).
  2. Сторонние библиотеки (external).
  3. Внутренние модули проекта (internal).

Каждую категорию можно дополнительно сортировать в алфавитном порядке.

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

Исходный беспорядок:

from .models import User
import os
from django.db.models import Q
import sys
from ..utils import log_event
from collections import defaultdict

После применения isort:

import os
import sys
from collections import defaultdict

from django.db.models import Q

from .models import User
from ..utils import log_event

Функционал isort:

  • Автоматическое удаление избыточных импортов.
  • Поддержка множественных режимов сортировки (разделители, префикс, постфиксы).
  • Распределение на группы: разделяет импорты на стандартные, сторонние и внутренние.
  • Возможность сохранения текущего порядка (конфигурационно настраивается).

Инструкция по применению:

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

pip install isort

2. Базовое использование:

Применить isort к файлу:

isort my_file.py

3. Конфиги:

Настроить isort можно через конфигурационный файл setup.cfg или .isort.cfg.

Пример минимальной конфигурации:

[settings]
force_single_line=True
lines_after_imports=2
known_first_party=my_app

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

Большинство современных IDE поддерживают isort через плагины (VSCode, PyCharm и др.).

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

Почему isort удобен?

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

Альтернатива:

Другим популярным инструментом для форматирования Python-кода является Black.

В отличие от isort, Black занимается общим форматированием, а не только сортировкой импортов.

Часто эти два инструмента комбинируются для достижения наилучшего результата.

Заключение:

Isort — отличное средство для приведения Python-кода в порядок,

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

Инструмент лёгок в освоении и применении, заметно повышает читабельность и облегчает поддержку кода.