簡體   English   中英

你如何獲得 python 包的 pydoc 可訪問路徑列表,例如 numpy 或 tensorflow?

[英]How do you get a list of pydoc accessible paths for a python package, e.g. numpy or tensorflow?

我正在嘗試獲取可以在其上使用 pydoc 的 python 包(例如 numpy)中的所有路徑。 理想情況下,此列表將包含以下元素:

numpy numpy.linalg numpy.linalg.det ...

因此,理想情況下,將遞歸到包內的子模塊和類中,這些路徑將是選項卡完成在啟用的編輯器中為您提供的路徑。 為了保持一致性,我更願意從已安裝的軟件包中獲取此列表。

此列表的目的是將其提供給模糊完成引擎以選擇要發送到 pydoc 的項目,例如。 通過鍵入“det”,引擎將選擇包含該字符串的所有條目(因此我不必記住它的完整路徑),並且我可以從那里選擇我想要的條目。 一旦我有了路徑列表,那部分就很簡單了! 慢不慢沒關系,我只需要做一次,就可以保存到文件中以備后用。 列表是否很長也沒有關系。 完成引擎可以處理非常大的列表。

有沒有直接的方法來做到這一點? 我已經嘗試了一些使用檢查模塊的變體,通過dict屬性遞歸,甚至一個帶有 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 並修改類型遍歷代碼之外,我不確定這是否可行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM