我正在编写嵌套 matplotlib (MPL) 库的文档(个人),该库与感兴趣的子模块包提供的 MPL 自己不同。我正在编写 Python 脚本,我希望它能够从 future 的 MPL 版本中自动生成文档。
我选择了感兴趣的子模块/包,并希望列出它们的主要类,我将从这些类中生成列表并使用 pydoc
处理它
问题是我找不到一种方法来指示 Python 从字符串加载子模块。这是我尝试过的示例:
import matplotlib.text as text
x = dir(text)
。
i = __import__('matplotlib.text')
y = dir(i)
.
j = __import__('matplotlib')
z = dir(j)
这是通过 pprint 对上述列表进行 3 种比较:
我不明白 y
中加载了什么对象 - 它是基础 matplotlib
加上其他东西,但它缺少我想要的信息,这是来自 matplotlib.text
的主要类(class)包裹。它是屏幕截图上的顶部蓝色部分(x
列表)
请不要建议使用 Sphinx 作为不同的方法。
最佳答案
__import__
函数可能有点难以理解。
如果你改变了
i = __import__('matplotlib.text')
到
i = __import__('matplotlib.text', fromlist=[''])
然后 i
将引用 matplotlib.text
。
在 Python 3.1 或更高版本中,您可以使用 importlib
:
import importlib
i = importlib.import_module("matplotlib.text")
一些笔记
如果您尝试从子文件夹导入某些内容,例如./feature/email.py
,代码看起来像 importlib.import_module("feature.email")
在 Python 3.3 之前,如果您尝试导入的文件所在的文件夹中没有 __init__.py
,您将无法导入任何内容(在决定是否要保留之前,请参阅 caveats向后兼容的文件,例如与 pytest
).
https://stackoverflow.com/questions/8718885/