我正在为嵌套的matplotlib ( MPL )库编写文档(个人),它不同于MPL自己提供的,由感兴趣的子模块包提供。我正在编写Python脚本,我希望它能从未来的MPL版本自动生成文档。
我选择了感兴趣的子模块/包,并希望列出它们的主类,我将从这些主类中生成列表并使用pydoc
对其进行处理
问题是我找不到一种方法来指示Python从string加载子模块。下面是我尝试过的示例:
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
包中的主类。屏幕截图上的顶部蓝色部分(x
列表)
请不要建议将Sphinx作为不同的方法。
发布于 2012-01-04 05:49:58
importlib.import_module
就是你要找的东西。它返回导入的模块。
import importlib
mymodule = importlib.import_module('matplotlib.text')
然后,您可以访问模块中的任何内容,如mymodule.myclass
、mymodule.myfunction
等。
发布于 2015-02-21 07:03:38
我花了一些时间尝试从列表中导入模块,这是我完成大部分工作的线索-但我没有掌握___import____的用法-
因此,下面介绍如何从字符串导入模块,并获得与导入相同的行为。并尝试/排除错误情况。:)
pipmodules = ['pycurl', 'ansible', 'bad_module_no_beer']
for module in pipmodules:
try:
# because we want to import using a variable, do it this way
module_obj = __import__(module)
# create a global object containging our module
globals()[module] = module_obj
except ImportError:
sys.stderr.write("ERROR: missing python module: " + module + "\n")
sys.exit(1)
是的,对于python 2.7>,你有其他的选择--但是对于2.6<,这是可行的。
发布于 2020-02-03 15:03:48
除了使用importlib
之外,还可以使用exec
方法从字符串变量导入模块。
这里我展示了一个使用exec
方法从itertools
包导入combinations
方法的示例:
MODULES = [
['itertools','combinations'],
]
for ITEM in MODULES:
import_str = "from {0} import {1}".format(ITEM[0],', '.join(str(i) for i in ITEM[1:]))
exec(import_str)
ar = list(combinations([1, 2, 3, 4], 2))
for elements in ar:
print(elements)
输出:
(1, 2)
(1, 3)
(1, 4)
(2, 3)
(2, 4)
(3, 4)
https://stackoverflow.com/questions/8718885
复制相似问题