在Python中找出可导入的模块

时间:2012-06-27 11:33:10

标签: python autocomplete ipython

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

1 个答案:

答案 0 :(得分:0)

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