在 python 3.7 中使用 exec() 导入别名不起作用
Import alias not working using exec() in python 3.7
/my/charts/
|- module/
|-abc.py
|- runtest.py
|- main.py
|- sample.py
我正在尝试从 runtest.py 呼叫 main.py。在那,我想导入 abc.py 使用 exec:-
module_name = 'module.abc'
chart_type = 'abc'
exec('from {} import {} as drawing_class'.format(module_name,chart_type))
当我 运行 代码时它没有给出任何错误但是当我打印 dir(drawing_class) 或 drawing_class 在 exec 的下一行然后它给出了一个错误。
像 NameError: 名称 'drawing_class' 未定义
但是当我在 sample.py 中编写相同的执行代码时,它按预期工作。
为什么这个 exec 在 main.py 中不起作用?
考虑以下配置,从标准库导入代码:
module_name = 'logging.config'
chart_type = 'dictConfig'
这在调用时正常工作:
import importlib
drawing_class = getattr(importlib.import_module(module_name), chart_type)
...因此完全不需要 exec
。
/my/charts/
|- module/
|-abc.py
|- runtest.py
|- main.py
|- sample.py
我正在尝试从 runtest.py 呼叫 main.py。在那,我想导入 abc.py 使用 exec:-
module_name = 'module.abc'
chart_type = 'abc'
exec('from {} import {} as drawing_class'.format(module_name,chart_type))
当我 运行 代码时它没有给出任何错误但是当我打印 dir(drawing_class) 或 drawing_class 在 exec 的下一行然后它给出了一个错误。 像 NameError: 名称 'drawing_class' 未定义
但是当我在 sample.py 中编写相同的执行代码时,它按预期工作。
为什么这个 exec 在 main.py 中不起作用?
考虑以下配置,从标准库导入代码:
module_name = 'logging.config'
chart_type = 'dictConfig'
这在调用时正常工作:
import importlib
drawing_class = getattr(importlib.import_module(module_name), chart_type)
...因此完全不需要 exec
。