动态导入模块

时间:2018-11-06 18:00:59

标签: python python-3.x python-import

我已经读过this related question,但是我无法应用任何给定的答案。

我有几个测试脚本,它们都使用在公共文件中实现的相同功能。

公共文件以以下import语句开头:

from Class1       import          Class1
from Class2       import Type1 as Class2
from Class3       import Type1 as Class3
from Class4       import          Class4
from Class5.Type1 import          Class5
from Class6.Type1 import          Class6

我希望能够为某些测试脚本更改Type1

目前,我只是从公共文件中取出相关语句,然后将它们放在每个要测试类型的测试文件中。

但是我正在寻找一种“更精细”的方法,例如,传递一个表示类型的字符串,并根据该输入字符串动态导入。

这将使我最小化测试脚本。

我想我可能需要将import语句放在测试脚本所调用的函数中,但是我很好。

我到底该如何实现?

我没有尝试过臭名昭著的eval,因为:

  1. 这是邪恶的
  2. 我非常确定它不适用于“非只读”表达式

任何想法都会非常感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用内置的importlib模块

import importlib

type_str = function_that_determines_this_val()
module = importlib.import_module(module)
obj = getattr(module, type_str)

不确定这正是您要寻找的东西,但是importlib可能正是您要寻找的东西。