python 如何使用 imp.find_module 或者替代

标签 python autocomplete module

我目前正在为 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/

相关文章:

Python Pandas 数据帧 : unorderable types: str() > int()

python - isinstance() 意外返回 False

python - 将 seaborn.palplot 轴添加到现有图形中以可视化不同的调色板

javascript - 使用 jquery 或 javascript 自动完成

python - 如何在 Python 中单独导入一个子模块?

linux - 如何理解Linux内核模块的 "Building Separate Files"?

python - 为什么 binascii.a2b_hex() 返回一个字符串?

vim - 创建执行选项卡的 vim 映射(自动完成)

c# - 如何在 C#.NET GUI 应用程序中实现语法高亮和自动完成功能?

python-3.x - 在python3中导入时间模块