首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从字符串变量导入模块

从字符串变量导入模块
EN

Stack Overflow用户
提问于 2012-01-04 05:29:38
回答 4查看 171.9K关注 0票数 210

我正在为嵌套的matplotlib ( MPL )库编写文档(个人),它不同于MPL自己提供的,由感兴趣的子模块包提供。我正在编写Python脚本,我希望它能从未来的MPL版本自动生成文档。

我选择了感兴趣的子模块/包,并希望列出它们的主类,我将从这些主类中生成列表并使用pydoc对其进行处理

问题是我找不到一种方法来指示Python从string加载子模块。下面是我尝试过的示例:

代码语言:javascript
复制
import matplotlib.text as text
x = dir(text)

代码语言:javascript
复制
i = __import__('matplotlib.text')
y = dir(i)

代码语言:javascript
复制
j = __import__('matplotlib')
z = dir(j)

下面是通过pprint对以上列表进行3种方式的比较:

我不明白y对象中加载了什么-它是基础matplotlib加上其他东西,但它缺少我想要的信息,也就是matplotlib.text包中的主类。屏幕截图上的顶部蓝色部分(x列表)

请不要建议将Sphinx作为不同的方法。

EN

回答 4

Stack Overflow用户

发布于 2012-01-04 05:49:58

importlib.import_module就是你要找的东西。它返回导入的模块。

代码语言:javascript
复制
import importlib

mymodule = importlib.import_module('matplotlib.text')

然后,您可以访问模块中的任何内容,如mymodule.myclassmymodule.myfunction等。

票数 85
EN

Stack Overflow用户

发布于 2015-02-21 07:03:38

我花了一些时间尝试从列表中导入模块,这是我完成大部分工作的线索-但我没有掌握___import____的用法-

因此,下面介绍如何从字符串导入模块,并获得与导入相同的行为。并尝试/排除错误情况。:)

代码语言:javascript
复制
  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<,这是可行的。

票数 5
EN

Stack Overflow用户

发布于 2020-02-03 15:03:48

除了使用importlib之外,还可以使用exec方法从字符串变量导入模块。

这里我展示了一个使用exec方法从itertools包导入combinations方法的示例:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
(1, 2)
(1, 3)
(1, 4)
(2, 3)
(2, 4)
(3, 4)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8718885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档