从stringvariables导入模块
我正在为嵌套matplotlib(MPL)库,它不同于MPL自己提供的,由感兴趣的子模块包的文档(个人)。 我正在编写Python脚本,我希望能够从未来的MPL版本自动生成文档。
我select了感兴趣的子模块/包,并想列出他们的主要类,我将生成列表并使用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的以上列表的三路比较:
我不明白在y
对象中加载了什么东西 – 它是matplotlib
加上其他东西,但它缺less我想要的信息,这是matplotlib.text
包中的主要类。 这是截图( x
列表)上顶部的蓝色部分
请不要build议狮身人面像不同的方法。
__import__
函数可能有点难以理解。
如果你改变
i = __import__('matplotlib.text')
至
i = __import__('matplotlib.text', fromlist=[''])
那么i
会参考matplotlib.text
。
在Python 2.7和Python 3.1或更高版本中,您可以使用importlib
:
import importlib i = importlib.import_module("matplotlib.text")
一些笔记
-
如果你想从子文件夹中导入某些东西,例如
./feature/email.py
,那么代码将看起来像importlib.import_module("feature.email")
-
如果文件夹中没有
__init__.py
文件夹,您不能导入任何内容
我认为importlib.import_module是你在找什么。 (仅适用于Python> = 2.7或3.x):
importlib.import_module('matplotlib.text')
花了一些时间试图从列表中导入模块,这是最让我感兴趣的线程 – 但我没有把握___import____的使用 –
所以这里是如何从一个string导入一个模块,并获得相同的行为,只是导入。 并尝试/除了错误的情况下。 🙂
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>你有其他的select – 但对于2.6 <,这个工程。