Я работаю над проектом django, который обслуживает несколько сайтов; в зависимости от сайта я хочу импортировать различные функции из другого модуля; Как импортировать модуль в Python, если у меня есть имя его пакета и само имя модуля в виде строки?
в Python обычно вы можете использовать __import__ встроенную функцию или imp функции модуля:
__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 Функции для работы с модулями Python. import_string(dotted_path) Импортирует пунктирный путь к модулю и возвращает атрибут / класс, обозначенный фамилией в пути. Вызывает ImportError, если импорт не удался. Например: from django.utils.module_loading import import_string ValidationError = import_string('django.core.exceptions.ValidationError') эквивалентно: from django.core.exceptions import ValidationError
django.utils.module_loading
Функции для работы с модулями Python.
import_string(dotted_path)
Импортирует пунктирный путь к модулю и возвращает атрибут / класс, обозначенный фамилией в пути. Вызывает ImportError, если импорт не удался. Например:
from django.utils.module_loading import import_string ValidationError = import_string('django.core.exceptions.ValidationError')
эквивалентно:
from django.core.exceptions import ValidationError