Более быстрый переход на большую кодовую базу Python

В качестве программистов мы читаем больше, чем пишем. Я начал работать в компании, которая использует пару "больших" пакетов Python; пакеты или семейства пакетов, которые имеют высокий уровень KLOC. Пример: Zope.

Моя проблема в том, что у меня проблемы с быстрой и быстрой переходом на эту кодовую базу. Моя текущая стратегия

  • Я начинаю читать модуль, который мне нужно изменить/понять
  • Я попал в импорт, который мне нужно знать больше
  • Я узнаю, где исходный код для этого импорта, поместив инструкцию python debug (pdb) после импорта и повторив модуль, который сообщает мне исходный файл
  • Я перехожу к нему, в оболочку или в проводник файла Vim.
  • большую часть времени сам модуль импортирует больше модулей, и, прежде чем я это узнаю, у меня есть 10KLOC "на моей тарелке".

В качестве альтернативы:

  • Я вижу метод/класс, мне нужно знать больше
  • Я выполняю поиск (ack-grep) для определения этого метода/класса во всей кодовой базе (что может быть больно, потому что база кода частично находится в ~/.buildout-eggs)
  • Я нахожу одну или несколько частей кода, которые определяют этот метод/класс
  • Я должен определить, какой из них мне нужен, чтобы читать

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

Поэтому я ищу технические инструменты или стратегические решения для этой проблемы. ...

Я просто не могу представить себе хардкорных программистов на Python, используя стратегии, описанные выше.

Ответ 1

на Vim, мне нравится NERDTree (файловый браузер) и taglist.vim(браузер исходного кода → http://www.vim.org/scripts/script.php?script_id=273)

также в Vim, вы можете использовать CTRL-] для перехода к определению (: h CTRL -]):

  • загрузить exuberant ctags http://ctags.sourceforge.net/
  • следуйте инструкциям по установке и поместите их где-нибудь на свой PATH
  • из корневого каталога вашего исходного кода, создайте файл файл из оболочки: "ctags -R"
  • (убедитесь, что у вас есть: установите noautochdir и убедитесь, что: pwd - это каталог root с шага 3)
  • перейдите в Vim, наведите курсор на какую-либо функцию или имя класса, нажмите CTRL -]

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

если тег имеет только одно совпадение, он сразу же переходит к нему

... затем используйте Ctrl + O и Ctrl + я для перемещения туда и обратно, где вы были

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

Ответ 2

Я использую ipython?? Команда

Вам просто нужно выяснить, как импортировать вещи, которые вы хотите найти, а затем добавить? до конца модуля или класса или имени функции или метода, чтобы просмотреть их исходный код. И завершение команды помогает также определять длинные имена.