我目前正在为 python 编写自动完成功能。因此我需要找到导入的模块。
使用 imp.find_module 似乎很容易,但如果我插入一个路径,它就不起作用,这对自动完成很重要。插入路径意味着它不会找到系统模块。
解决方案是获取 PYTHONPATH,然后将其插入。但这确实不是一个好方法,因为我只想要默认路径。此外,PYTHONPATH 甚至不在我的 os.environ[] 中。
除了这个复杂的程序真的没有其他选择吗?如果没有,我如何获得库的默认路径?
是否有更好的解决方案,自动爬取目录?
注意:由于我正在编写自动完成功能,所以我不想实际导入/执行任何代码。
最佳答案
要获取标准库的路径,请使用:
>>> 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)。
关于python 如何使用 imp.find_module 或者替代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9881472/