我正在开发一个Django项目,它服务于多个站点。根据不同的站点,我想从不同的模块中导入不同的功能。如果我有包名和模块名的字符串,我该如何在Python中导入一个模块?
在Python中,通常可以使用__import__
内置函数或imp
模块的特性:
>>> sys1 = __import__("sys")
>>> import imp
>>> sys2 = imp.load_module("sys2", *imp.find_module("sys"))
>>> import sys
>>> sys is sys1 is sys2
True
Django有自己的导入函数,可以从字符串中获取对象。来自文档:
django.utils.module_loading
Functions for working with Python modules.
import_string(dotted_path)
Imports a dotted module path and returns the attribute/class designated by the last name in the path. Raises ImportError if the import failed. For example:
from django.utils.module_loading import import_string ValidationError = import_string('django.core.exceptions.ValidationError')
is equivalent to:
from django.core.exceptions import ValidationError