如何获取 python 包的 pydoc 可访问路径列表,例如 numpy 或 tensorflow?



我正在尝试获取python包(例如numpy)中可以使用pydoc的所有路径。理想情况下,此列表将包含以下元素:

努比 numpy.linalg numpy.linalg.det ...

因此,理想情况下,将递归为包内的子模块和类,这些路径将是选项卡完成在启用的编辑器中为您提供的路径。为了保持一致性,我更愿意从已安装的软件包中获取此列表。

此列表的目的是将其提供给模糊完成引擎以选择要发送到 pydoc 的项目,例如。 通过键入"det",引擎将选择包含该字符串的所有条目(因此我不必记住它的完整路径),我可以从那里选择我想要的条目。一旦我有了路径列表,这部分就很容易!这是否慢没关系,我只需要做一次,就可以将其保存到文件中以供以后使用。列表是否很长也没关系。完成引擎可以处理非常大的列表。

有没有一种简单的方法可以做到这一点?我已经尝试了检查模块的一些变体,通过字典属性递归,甚至是使用 rlcompleter 的变体,但到目前为止,我要么在递归方面没有取得多大成功,要么路径在 pydoc 中没有用。

是的,有一种方法可以做到这一点。 例如,对于 NumPy:

from pkgutil import walk_packages
import numpy
# Obtain list with all modules found in the package
mod_list = [name for _, name, _ in walk_packages(numpy.__path__,
numpy.__name__+'.')]

这将为您提供一个列表mod_list其中包含 NumPy 包具有的所有子模块,以字符串形式给出。

哦,从你的评论来看,你的意思是 pydoc 遍历的所有type

Pydoc 确实将其文档限制在__all__列表中,但我很确定,如果__all__等于一个类,它仍然会记录该类的方法等,这些方法本身就是类型。

import numpy
print(numpy.__all__)

我会尝试使用 pydoc 的类型遍历代码,但它与 UI 问题混为一谈,以至于它不能很好地用作"更好"的inspect模块。 在您可以创建"类型"累加器之前,除了分叉 pydoc 并修改类型遍历代码之外,我不确定这是否可行。

最新更新