Python从另一个包获取模块引用,知道包和模块名称

时间:2013-11-04 09:11:10

标签: python

如何通过名称从另一个包中获取对模块的引用?

考虑:

genericCall(packageName, moduleName, methodName):
    #Call moduleName.methodName
    #knowing that the moduleName is in packageName

其中

packageName="p1"
moduleName="m1"
methodName="f1"

2 个答案:

答案 0 :(得分:3)

您必须导入模块或包,并且要按名称进行操作,您可以使用__import__importlib.import_module

import importlib

def genecirCall(package_name, module_name, function_name):
    # import module you need
    module = importlib.import_module('%s.%s' % (package_name, module_name))
    getattr(module, function_name)() # make a call

请注意,在此示例中,module变量将是本地变量。

答案 1 :(得分:2)

__import__提供了动态导入包的功能。然后在导入包之后,可以使用getattr从模块名称中获取模块对象(在Python中称为introspection)。由于这两个函数都是内置函数,因此您可以在不显式导入其他函数的情况下使用它们。 doc提供了有关这些内置函数的更多信息。

package = __import__(packageName)
module = getattr(package, moduleName)
method = getattr(module, methodName)
method(...)