Repolode
tach-org

tach-org/tach

Инструмент для Python на Rust, который визуализирует зависимости между модулями и публичные интерфейсы кодовой базы и следит за их соблюдением.

Звёзды
2,862
Форки
98
Открытые issues
56
Последний коммит
9 дней назад

Что это?

Tach помогает Python-проектам сохранять границы между модулями. Вы задаёте, каким модулям разрешено зависеть друг от друга, а Tach проверяет импорты по этим правилам и отмечает те, которые нарушают границы. Также он позволяет ограничить вызовы между модулями объявленным публичным интерфейсом и обнаруживать циклы в графе зависимостей.

Инструмент рассчитан на модульные монолиты и подходит для постепенного внедрения: можно отслеживать только выбранные пакеты. Настройка проходит в интерактивном режиме с помощью `tach init`, а при нарушениях `tach check` завершается с ненулевым кодом — поэтому его удобно запускать в CI или как pre-commit hook.

Tach также умеет визуализировать граф зависимостей: в виде веб-страницы с помощью `tach show --web` или локального файла GraphViz DOT. Команда `tach report` выводит зависимости и места использования для указанного пути.

Ключевые возможности

  • 01Проверяет импорты на соответствие объявленным зависимостям между модулями
  • 02Ограничивает вызовы между модулями их публичными интерфейсами
  • 03Обнаруживает циклы в графе зависимостей
  • 04Поддерживает постепенное внедрение: можно отметить только выбранные модули
  • 05Визуализирует зависимости в виде веб-графа или в формате GraphViz DOT
  • 06Интегрируется с CI и pre-commit hooks, завершаясь с ненулевым кодом при нарушениях

Сценарии использования

  • Соблюдение слоистой или модульной архитектуры в крупном монолите на Python
  • Предотвращение нежелательных импортов между пакетами в монорепозитории на Python
  • Постепенное внедрение архитектурных правил в существующую кодовую базу
  • Анализ структуры зависимостей проекта по сгенерированному графу

Быстрый старт

  1. 1

    Установите Tach из PyPI

    pip install tach
  2. 2

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

    tach init
  3. 3

    Примените настроенные ограничения из корневого каталога проекта

    tach check

Что важно знать

  • Поддерживаются только кодовые базы на Python.
  • Границы проверяются статически, а зависимости между модулями необходимо вручную указывать в tach.toml.

В подборках

Темы

Частые вопросы

Что такое tach?
Инструмент для Python на Rust, который визуализирует зависимости между модулями и публичные интерфейсы кодовой базы и следит за их соблюдением. Tach помогает Python-проектам сохранять границы между модулями. Вы задаёте, каким модулям разрешено зависеть друг от друга, а Tach проверяет импорты по этим правилам и отмечает те, которые нарушают границы. Также он позволяет ограничить вызовы между модулями объявленным публичным интерфейсом и обнаруживать циклы в графе зависимостей.
tach можно использовать бесплатно? Какая у него лицензия?
tach распространяется с открытым исходным кодом под лицензией MIT. Перед использованием в коммерческих продуктах проверьте условия лицензии.
tach всё ещё поддерживается?
Активно поддерживается. Последний коммит в tach — 29 окт. 2026 г..
Для чего можно использовать tach?
Соблюдение слоистой или модульной архитектуры в крупном монолите на Python Предотвращение нежелательных импортов между пакетами в монорепозитории на Python Постепенное внедрение архитектурных правил в существующую кодовую базу Анализ структуры зависимостей проекта по сгенерированному графу
Как установить tach?
Установите Tach из PyPI: pip install tach Запустите интерактивную настройку, чтобы задать границы модулей: tach init Примените настроенные ограничения из корневого каталога проекта: tach check
Где скачать tach?
Исходный код и инструкции по установке — на GitHub: https://github.com/tach-org/tach

Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.

Похожие проекты

Расширяемый линтер для ECMAScript/JavaScript, который находит проблемные конструкции в коде и умеет автоматически исправлять многие из них.

27,6 тыс.+1 за неделю5,2 тыс.JavaScriptMITАктивно поддерживаетсяОбновлён 4 часа назад