2010-07-05 163 views
2

我正在开发一个为多个站点提供服务的django项目;取决于我想从不同模块导入不同功能的站点;如果我有它的包名和模块名本身作为一个字符串,我该如何在Python中导入一个模块?Python:通过名称加载模块

回答

9

在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 
1

Django的有自己的导入功能将得到一个字符串的客体。从documentation

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