Обнаружение изменений в API библиотеки Python

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

Другими словами, изменился ли API? Некоторые библиотеки следуют соглашению о версиях semver , которое явно сигнализирует о таких изменениях (включая более глубокие изменения). Но другие нет. Для них я хотел бы проверить API (т.е. все сигнатуры методов) и создать отчет о любых изменениях.

Я ищу:

  • бесплатная библиотека Python
  • который может генерировать отчет о заголовках классов/методов для произвольного модуля (папки)
  • (в идеале) выполнить diff между двумя модулями
  • (в идеале) оповещение о различиях на уровне Semver (т. е. критических изменениях в API)

Онлайн-эквивалент, охватывающий библиотеки, доступные в PyPI, будет достаточным, но он не идеален, поскольку не может работать с локальными/частными библиотеками.

Плагина IDE будет достаточно, и в этом случае плагин для PyCharm Community Edition будет идеальным, плагин для любой другой IDE с бесплатным программным обеспечением, которая поддерживает Windows, будет запасным вариантом.

Ответы (1)

Вы можете сгенерировать сигнатуру интерфейса для каждого класса/функции, что WingIDE делает со своим файлом generate_pi.py, и сравнить сигнатуры, но я подозреваю, что вы получите слишком много ложных срабатываний, например: если позиционный параметр переименованный (тот, который вы никогда не вызываете по имени), вам все равно скажут, что есть проблема.

Разумный способ — иметь достойный набор автоматических тестов для вашего кода, который максимально приближен к 100% функциональности кода — это всегда ценное вложение само по себе, и использовать pythons virtualenv , действительно хорошая запись здесь , чтобы настроить виртуальную среду для каждого поддерживаемого Python и запустить свои тесты. Вы можете периодически проверять версии библиотек, которые вы используете в настоящее время, и в каждой виртуальной среде запускать pip install -U библиотеку , а затем запускать тесты и смотреть, не сломано ли что-нибудь. См. вики таксономии инструментов тестирования python для получения списка возможных инструментов и Руководство автостопщика для некоторых полезных советов.

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

Кроме того, вы могли бы использовать travis-ci или jenkins для автоматизации этого процесса.