我正在为python编写自动完成功能。因此,我需要找到导入的模块。
使用imp.find_module这似乎很容易,但如果我插入一个路径,它对自动完成很重要。插入路径意味着它将找不到系统模块。
解决方案是获取PYTHONPATH然后插入它。但这确实不是一个很好的方法,因为我只想要默认路径。另外PYTHONPATH甚至不在我的os.environ []中。
这个复杂的程序真的没有其他选择吗?如果没有,我怎样才能获得库的默认路径?
是否有更好的解决方案,可以自动通过目录进行抓取?
注意:由于我正在编写自动完成功能,因此我不想实际导入/执行任何代码。
答案 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)。