iPython 具有能够自动完成模块的出色功能,并且在其中运行得非常好。
很长一段时间以来,我都有一个 shell 函数,它允许我将目录更改为给定模块所在的位置。它通过尝试从第一个参数导入模块的名称并查看其__file__
.
我想做的是找出可用的可导入模块,这样我就可以为这个小助手编写一个自动完成功能。
我知道对于给定模块,我可以做类似的事情dir(module_name)
,这会给我该模块所需的东西,但我不确定该怎么做才能找出我可以导入的内容,就像 iPython 当你做类似的事情时:
import [TAB]
或者
import St[TAB]
这将自动完成所有以 . 开头的可导入模块St
。
我知道如何编写自动完成功能,我对找到知道我可以导入什么的方法很感兴趣。
编辑:
通过挖掘 IPython 代码,我设法找到了为给定环境获取所有当前模块的确切部分:
from IPython.core.completerlib import module_completion
for module in module_completion('import '):
print module
我打印结果的原因是因为我实际上使用它来完成 ZSH,所以我需要处理输出。