代码之家  ›  专栏  ›  技术社区  ›  Bernhard Vallant

python:按名称加载模块

  •  3
  • Bernhard Vallant  · 技术社区  · 14 年前

    我正在处理一个为多个站点提供服务的Django项目;根据站点的不同,我希望从不同的模块导入不同的功能;如果我将模块包的名称和模块名称本身作为字符串,如何在python中导入模块?

    2 回复  |  直到 8 年前
        1
  •  9
  •   mykhal    14 年前

    在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
    
        2
  •  2
  •   Zulu    8 年前

    Django有自己的导入函数来从字符串中获取objet。从 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