我想做与此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
答案 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