Как управляться с большими проектами на Python

Опубликовано 01 June 2016 в Python

На Hacker News появилась интересная дискуссия о том как управляться с большими Python проектами. Поскольку я причастен к достаточно большому проекту, то я не могу удержаться и не поделиться своим видением на этот вопрос. Я составил список из трех моментов на которые стоит обратить внимание.

1. Обеспечьте себе безболезненную навигацию по коду

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

2. Добейтесь хорошего покрытия тестами

Чем больше тестов, тем лучше. Если после изменений, тесты не проходят - это повод радоваться. Если проходят, надо насторожиться и проверить все ли тесты корректны. CI просто необходим.

Неплохо добавить проверку покрытия тестами. Причем из этой проверки не стоит исключать сами тесты. В них то же может быть приличное количество неиспользуемого кода с которым надо что-то делать.

3. Пользуйтесь type hinting

Во-первых, это отличное подспорье в самодокументировании кода (в Python 3). Во-вторых, это очень хороший способ найти проблемы в интерфейсах функций. Если очень сложно описать что функция принимает и что выдает, то может стоит эту функцию переписать.

Наш проект только готовится переехать на 3-ю ветку питона, так что мы не можем в полной мере использовать type hinting в самих описаниях функций, но мы описываем типы в докстрингах. PyCharm очень сильно помогает в этом.

Этот список - краткий анализ собственного опыта работы на большим проектом на Python. Я не стал включать в него наставления по проектированию архитектуры проекта (компоненты нужно делать слабосвязными и т.п.). Подобные советы, как правило, не очень хорошо работают. Гораздо лучше и проще внедрить то, что легко проверить: не сломалась ли навигация по коду, есть ли тест, есть ли описание типов.

---
Возник вопрос? Мне всегда можно написать в Twitter: avkorablev