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

2024-10-01 11:27:31 发布

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

我想做这个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

Tags: 模块fromimportutilsys语句importlibmodule
2条回答

不确定在什么意义上您希望有一个“更好”的方法来完成它,但您可以简单地将代码封装在如下函数中:

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')

我不确定

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

但你能做到

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

相关问题 更多 >