python - 从字符串变量导入模块

我正在编写嵌套 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/

相关文章:

python - 子进程 Popen 和 call 有什么区别(我该如何使用它们)?

python - 为什么 Python 的 math.ceil() 和 math.floor() 操

python - 在 Python 中循环列表

linux - Linux 的虚拟串行端口

python - 谁能解释python的相对进口?

linux - 获取后台进程的退出代码

c - 为什么需要 .bss 段?

python - 如何模拟请求和响应?

linux - 查找连接到 Linux 机器的所有存储设备

linux - 如何在 Linux 上将行添加到文件末尾