作为程序员,我们阅读的内容比编写的要多。我开始在一家使用几个“大”Python软件包的公司工作;具有高KLOC的包裹或包裹系列。例证:Zope。
我的问题是我无法快速/轻松地浏览此代码库。我目前的策略是
- 我开始阅读一个我需要改变/理解的模块
- 我打了一个我需要了解更多的导入
- 我通过在导入和回显模块之后放置Python调试(pdb)语句来找出导入的源代码的位置,它告诉我它的源文件
- 我导航到它,在shell或Vim文件资源管理器中。
- 大部分时间模块本身都会导入更多的模块,在我知道之前我已经“在我的盘子上”有10KLOC
或者:
- 我看到了一个我需要了解更多的方法/类
- 我在整个代码库中对该方法/类的定义进行搜索(ack-grep)(这可能很痛苦,因为代码库部分在〜/ .buildout-eggs中)
- 我找到一个或多个定义该方法/类的代码
- 我必须推断出哪一个是我需要阅读的
这花费了大量时间,这对于大型代码库来说是可以理解的。但我感觉到了 导航 一个庞大而未知的Python代码库是一个常见的问题。
所以我正在为这个问题寻找技术工具或战略解决方案。
...
我只是 不能 想象一下使用上述策略的硬核Python程序员。
在Vim上,我喜欢NERDTree(文件浏览器)和taglist.vim(源代码浏览器 - > http://www.vim.org/scripts/script.php?script_id=273)
同样在Vim中,您可以使用CTRL-]跳转到定义(:h CTRL-]):
- 下载旺盛的ctags http://ctags.sourceforge.net/
- 按照安装说明将其放在PATH上的某个位置
- 从源代码的'root'目录,从shell创建一个标签文件:“ctags -R”
- (确保你有:设置noautochdir,并确保:pwd是
root
步骤3)中的目录
- 进入Vim,将光标移到某个函数或类名上,按CTRL-]
默认情况下,如果标记有多个匹配项,则会显示导入的所有位置以及声明的位置
如果标签只有一个匹配,它会立即跳转到它
...然后使用Ctrl + O和Ctrl + I从您所在的位置来回移动
(对你使用的特定库的源代码重复上面的步骤,我通常会打开一个单独的Vim窗口来研究东西)
我用ipython的?命令
你只需要弄清楚如何导入你想要寻找的东西,然后添加?到模块或类或函数或方法名称的末尾以查看其源代码。命令完成也有助于找出长名称。