1

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,所以我需要处理输出。

4

1 回答 1

0

作为起点,您可以遍历sys.path查找 python 模块的路径,因为这正是这样import做的。除此之外,Python 不会为所有模块提供索引或其他内容,因为导入在运行时被请求时解析。您可以轻松地为内置模块提供索引,并且可能为以前导入的模块提供缓存或其他东西。

于 2012-06-27T11:36:46.353 回答