【问题标题】:python how to use imp.find_module or alternativepython 如何使用 imp.find_module 或替代
【发布时间】:2012-03-27 09:09:37
【问题描述】:

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

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

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

这个复杂的程序真的没有其他选择吗?如果没有,如何获取库的默认路径?

是否有更好的解决方案,自动爬取目录?

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

【问题讨论】:

  • 所以您想使用自定义模块搜索路径集并包括标准/系统范围的模块自动完成import 语句?
  • 是的,这就是我想要的。但我最终想要一个文件的源代码(如果它没有像'time'这样的库)。

标签: python autocomplete module


【解决方案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) 一部分的文件。

【讨论】:

  • 这不是这个问题的目的。这是关于寻找可以导入但可能不会导入的模块。所以实际的解决方案必须涉及一些目录遍历和一些东西。
  • 你是对的。我误解了这个问题。我会更新我的答案。
  • 我现在接受了你的回答,因为我不再真正理解我自己的问题了。但是,使用imp.find_module 可以遵循导入路径,使用pkgutil.iter_modules 列出目录(或所有全局模块)中的python 模块/包非常容易。
猜你喜欢
  • 2011-08-10
  • 1970-01-01
  • 2014-12-01
  • 1970-01-01
  • 2020-04-01
  • 2017-01-27
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
相关资源
最近更新 更多