Программирование

Визуализируйте зависимости между модулями Python

Лучше разбирайтесь в своих модулях кода с помощью Pydeps

Вы когда-нибудь проходили через репозитории вроде Detectron или TF Object Detection API? Насколько легко вам ориентироваться в коде или понимать его? Разве не лучше, если у вас есть инструмент, помогающий лучше понять код?

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

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

Итак, я искал способ получить график всех зависимостей между скриптами python. Затем я нашел инструмент под названием Pydeps. Сгенерировав график всех зависимостей, я смог лучше ориентироваться в коде и понимать его. Если вам сложно понять какой-либо сложный код Python, используйте Pydeps для визуализации зависимостей модулей.

Установка

Установка проста. Пакет доступен как часть PIP.

pip install pydeps

Если вы хотите создавать графики с помощью Pydeps, вам также необходимо установить Graphviz.

sudo apt install graphviz

использование

Использование очень простое. Просто запустите pydeps <filename>. Он создаст график всех зависимостей для этого файла. У них также есть много необязательных аргументов в командной строке.

usage: pydeps [-h] [--debug] [--config FILE] [--no-config] [--version] [-L LOG] [-v] [-o file] [-T FORMAT] [--display PROGRAM] [--noshow] [--show-deps] [--show-raw-deps] [--show-dot] [--nodot] [--no-output] [--show-cycles] [--debug-mf INT] [--noise-level INT] [--max-bacon INT] [--pylib] [--pylib-all] [--include-missing] [-x PATTERN [PATTERN ...]] [-xx MODULE [MODULE ...]] [--only MODULE_PATH [MODULE_PATH ...]] [--externals] [--reverse] [--cluster] [--min-cluster-size INT] [--max-cluster-size INT] [--keep-target-cluster] [--rmprefix PREFIX [PREFIX ...]] fname

Описание всех этих аргументов дано в их Github. Не стесняйтесь смотреть на него, чтобы понять все варианты использования. Мы увидим здесь примеры наиболее полезных аргументов.

Примеры

Без дополнительных аргументов:

Просто запустите pydeps <filename>. Вы получите следующий результат.

Как видите, он показывает только импортированные пакеты. Если вы хотите увидеть зависимости других скриптов Python, используйте «--include-missing».

--include-missing:

Аргумент --include-missing включает также импорт Python из других скриптов.

Как видно из вышесказанного, он показывает зависимости до уровня 2. Если вы хотите визуализировать зависимости только до уровня 1, используйте «--max-bacon 1».

--max-бекон:

--max-bacon используется для указания уровня, на котором должны отображаться зависимости. Это позволяет вам отфильтровывать модули, которые удалены более чем на заданное количество переходов. значение по умолчанию - 2. Ниже приведен пример вывода для - max-bacon как 2 и -max-bacon как 0 - что означает бесконечность.

Если у вас сложный репозиторий, - max-bacon будет полезен для сокращения зависимостей для лучшей визуализации.

--show-Cycle:

Еще один важный аргумент, который может быть полезен, - это «шоу-циклы». Если в папке есть взаимосвязанный импорт, то есть два скрипта Python, импортируемые друг из друга, это образует цикл. Этот аргумент отображает эти циклы. См. Пример ниже.

relimp:
    - __init__.py
    - a.py: |
        from . import b
    - b.py: |
        from . import a

Это некоторые из полезных аргументов в Pydeps. Конечно, вы также можете импортировать pydeps из Python и использовать его как библиотеку. Этот инструмент очень полезен для визуализации зависимостей вашего кода Python. Узнайте больше о других аргументах и ​​использовании на их официальной странице Github. Спасибо!

использованная литература

Первоначально опубликовано на https://mlfornerd.com 8 мая 2021 г.