python如何使用imp.find_module或替代方法

时间:2012-03-26 23:45:48

标签: python autocomplete module

我正在为python编写自动完成功能。因此,我需要找到导入的模块。

使用imp.find_module这似乎很容易,但如果我插入一个路径,它对自动完成很重要。插入路径意味着它将找不到系统模块。

解决方案是获取PYTHONPATH然后插入它。但这确实不是一个很好的方法,因为我只想要默认路径。另外PYTHONPATH甚至不在我的os.environ []中。

这个复杂的程序真的没有其他选择吗?如果没有,我怎样才能获得库的默认路径?

是否有更好的解决方案,可以自动通过目录进行抓取?

注意:由于我正在编写自动完成功能,因此我不想实际导入/执行任何代码。

1 个答案:

答案 0 :(得分:1)

要获取标准库的路径,请使用:

>>> import sys
>>> sys.path
['', '/usr/lib/python27.zip', '/usr/lib/python2.7', ...]

使用这些路径,您可以使用os.listdir进行搜索,例如:

import sys, os 
standardlib = os.listdir(sys.path[n])

您将检查是否检查路径是否为目录。

stdlibs = []
for lib in sys.path:
    if os.path.isdir(lib): 
        for module in os.listdir(lib):
            stdlibs.append(lib + "/" + module)

您可能需要递归检查并检查扩展名。

这会让你知道从哪里开始。

您还必须检查当前目录(os.getcwd())以查找可以作为程序包一部分的文件(python package structure)。