等同于使用importlib.util从任意路径导入的“从模块导入(func1,func2,func3)”

时间:2019-07-16 15:41:14

标签: python python-3.x

我想做与此python import语句等效的

from module import func1, func2, func3, var1, var2, ...

,但是模块名称和位置作为命令行参数传递给脚本,因此我正在使用importlib.util。有没有更Python的方式将变量名放入主模块的名称空间?

import importlib.util
import sys

modulepath = sys.argv[1]
spec = importlib.util.spec_from_file_location('modulename', modulepath)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)

# Is there a better way than this?
func1 = module.func1
func2 = module.func2
func3 = module.func3

2 个答案:

答案 0 :(得分:1)

不确定您希望以哪种方式实现“更好”,但是您可以将代码封装在类似以下的函数中:

import importlib.util

def import_from(modulename, modulepath, *names):
    spec = importlib.util.spec_from_file_location(modulename, modulepath)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return tuple(getattr(module, name) for name in names)

那你可以做:

import sys

modulepath = sys.argv[1]
func1, func2, func3 = import_from('modulename', modulepath, 'func1', 'func2', 'func3')

答案 1 :(得分:0)

我不确定

from module import func1, func2, func3, var1, var2, ...

但是你可以做

func1, func2, func3 = module.func1, module.func2, module.func3