Более быстрый переход на большую кодовую базу 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?? Команда
Вам просто нужно выяснить, как импортировать вещи, которые вы хотите найти, а затем добавить? до конца модуля или класса или имени функции или метода, чтобы просмотреть их исходный код. И завершение команды помогает также определять длинные имена.
Ответ 3
Попробуйте красную таблетку: https://github.com/klen/python-mode