我想在事先不知道其名称的情况下导入子模块,
>>> __import__("os.path")
<module 'os' from '/usr/lib/python3.3/os.py'>
不像你想象的那样工作,返回os
,不是os.path
。
我想出了这个解决方案。
def import_submodule(mod, submod):
ns = {}
exec_str = "from %s import %s as submod" % (mod, submod)
exec(exec_str, ns, ns)
return ns["submod"]
这给出了结果:
>>> import_submodule("os", "path")
<module 'posixpath' from '/usr/lib/python3.3/posixpath.py'>
但是,我宁愿不使用 exec() ,因为它的做法很糟糕,并且当 Python 的导入机制已经通过__import__
,imp
和importlib
模块可用时似乎没有必要。
Python3.x 中有没有办法通过函数调用而不是使用来进行这种导入exec()
?