Python中的动态导入(点式语句)

2024-09-30 02:18:57 发布

您现在位置:Python中文网/ 问答频道 /正文

以下代码有问题:

def get_module(mod_path):
    mod_list = mod_path.split('.')
    mod = __import__(mod_list.pop(0))

    while mod_list:
        mod = getattr(mod, mod_list.pop(0))

    return mod

当我get_module('qmbpmn.common.db_parsers')时,我得到错误消息: AttributeError: 'module' object has no attribute 'db_parsers'。在

但是:import qmbpmn.common.db_parsers工作得非常好。在


Tags: path代码importmoddbgetdefcommon
2条回答

__import__与虚线模块路径一起工作,因此这应该可以工作

def get_module(mod_path):
    return __import__(mod_path)

或者更简单

^{pr2}$

也许我误解了这个问题

导入包并不会自动将所有子模块导入到它的命名空间中。例如

import qmbpmn

不是那个意思

qmbpmn.common.db_parsers

将自动解决

使用__import__导入子模块时,必须将父包作为fromlist参数传递:

>>> __import__("os.path")
<module 'os' from '/usr/lib/python2.6/os.pyc'>
>>> __import__("os.path", fromlist=["os"])
<module 'posixpath' from '/usr/lib/python2.6/posixpath.pyc'>

相关问题 更多 >

    热门问题