14

作为程序员,我们读的比写的多。我开始在一家使用几个“大”Python 包的公司工作。具有高 KLOC 的软件包或软件包系列。举个例子:佐佩。

我的问题是我无法快速/轻松地导航此代码库。我目前的策略是

  • 我开始阅读我需要更改/理解的模块
  • 我遇到了一个我需要了解更多信息的导入
  • 我通过在导入后放置 Python 调试 (pdb) 语句并回显模块来找出该导入的源代码在哪里,它告诉我它是源文件
  • 我在 shell 或 Vim 文件资源管理器中导航到它。
  • 大多数时候,模块本身会导入更多模块,在我知道之前,我已经“在我的盘子里”有 10KLOC

或者:

  • 我看到一个我需要了解更多的方法/类
  • 我在整个代码库中搜索(ack-grep)该方法/类的定义(这可能很痛苦,因为代码库部分位于 ~/.buildout-eggs 中)
  • 我找到了定义该方法/类的一段或多段代码
  • 我必须推断出其中哪一个是我需要阅读的

这会花费大量时间,这对于大型代码库是可以理解的。但我觉得导航一个庞大且未知的 Python 代码库是一个很常见的问题。

所以我正在寻找解决这个问题的技术工具或战略解决方案。...

无法想象铁杆 Python 程序员会使用上述策略。

4

3 回答 3

10

在 Vim 上,我喜欢 NERDTree(文件浏览器)和 taglist.vim(源代码浏览器 --> http://www.vim.org/scripts/script.php?script_id=273

同样在 Vim 中,您可以使用 CTRL-] 跳转到定义 (:h CTRL-]):

  1. 下载旺盛的 ctags http://ctags.sourceforge.net/
  2. 按照安装说明将其放在 PATH 的某个位置
  3. 从源代码的“根”目录中,从 shell 创建一个标签文件:“ctags -R”
  4. (确保你有 :set noautochdir,并确保 :pwd 是root第 3 步中的目录)
  5. 进入 Vim,将光标悬停在某个函数或类名上,按 CTRL-]

默认情况下,如果标签有多个匹配项,它会在任何地方显示它被导入的地方,以及它被声明的地方

如果标签只有一个匹配,它会立即跳转到它

...然后使用 Ctrl+O 和 Ctrl+I 从您所在的位置来回移动

(对你使用的特定库的源代码重复上述步骤,我通常会打开一个单独的 Vim 窗口来学习东西)

于 2012-08-02T19:44:54.997 回答
5

我用ipython的??命令

您只需要弄清楚如何导入您要查找的内容,然后添加 ?? 以模块或类或函数或方法名的结尾查看它们的源代码。命令完成也有助于找出长名称。

于 2012-08-02T13:18:24.697 回答
-1

试试红色药丸:https ://github.com/klen/python-mode

于 2012-08-24T17:40:44.483 回答