HiveNetCore.utils.import_tool module

库导入工具

class HiveNetCore.utils.import_tool.DynamicLibManager(base_lib_path: str)[源代码]

基类:object

动态库加载管理类

__init__(base_lib_path: str) None[源代码]

构造函数

参数

base_lib_path (str) – 默认加载动态模块所在目录

get_class(module_name: str, class_name: str, as_name_first: bool = True)[源代码]

获取指定模块的类对象(或成员函数)

参数
  • module_name (str) – 模块名或检索名

  • class_name (str) – 类名

  • as_name_first (bool) – default=True, 优先按检索名查找模块

返回

查找到的类对象

返回类型

Any

引发

ModuleNotFoundError – 当模块名找不到模块时抛出异常

get_instance(module_name: str, class_name: str, cache_id: Optional[str] = None, as_name_first: bool = True)[源代码]

获取缓存的类实例对象

参数
  • module_name (str) – 模块名或检索名

  • class_name (str) – 类名

  • cache_id (str) – default=None, 缓存的唯一检索id

  • as_name_first (bool) – default=True, 优先按检索名查找模块

返回

返回实例对象

返回类型

object

引发

ModuleNotFoundError – 当模块名找不到模块时抛出异常

get_module(module_name: str, as_name_first: bool = True) module[源代码]

获取指定模块对象

参数
  • module_name (str) – 模块名或检索名

  • as_name_first (bool) – default=True, 优先按检索名查找模块

返回

返回模块对象

返回类型

ModuleType

引发

ModuleNotFoundError – 当模块名找不到模块时抛出异常

init_class(module_name: str, class_name: str, init_args: Optional[list] = None, init_kwargs: Optional[dict] = None, stand_alone: bool = False, cache_id: Optional[str] = None, as_name_first: bool = True)[源代码]

初始化类实例

参数
  • module_name (str) – 模块名或检索名

  • class_name (str) – 类名

  • init_args (list) – default=None, 类实例的初始化固定参数, 以*args方式传入

  • init_kwargs (dict) – default=None, 类实例的初始化kv参数, 以*kwargs方式传入

  • stand_alone (bool) – default=False, 是否生成新的独立实例(不缓存)

  • cache_id (str) – default=None, 缓存的唯一检索id

  • as_name_first (bool) – default=True, 优先按检索名查找模块

返回

返回初始化后的实例对象

返回类型

object

引发

ModuleNotFoundError – 当模块名找不到模块时抛出异常

load(path: Optional[str] = None, module_name: Optional[str] = None, as_name: Optional[str] = None, class_mapping: Optional[dict] = None)[源代码]

装载指定模块模块

参数
  • path (str) – default=None, 文件路径或加载模块的指定搜索路径

  • module_name (str) – default=None, 要加载的模块名, 注意模块名必须全局唯一

  • as_name (str) – default=None, 获取模块对象的检索名

  • class_mapping (dict) –

    default=None, 类名映射字典, key为类别名, value为真实的类名

    注: 类名映射是设置在as_name下, 因此如果要使用该参数, 请设置as_name(例如设置为和模块名一致)

返回

返回 (module_name, module_obj)

返回类型

tuple

示例

path和module_name组合使用的例子

1、path为完整文件路径, module_name不设置, 则导入模块名为文件名(不含.py)

例如: path=’/test/xxx.py’, module_name=None

2、path为文件所在目录, module_name设置为文件名(不含.py), 按文件名自动获取文件进行导入

例如: path=’/test’, module_name=’xxx’

3、path为包所在目录, module_name设置为包含后续包路径的模块名, 需注意每个包路径下要有__init__.py文件

例如: path=’./test’, module_name=’aaa.bbb.xxx’

4、path设置为None, module_name设置为要搜索的模块名, 会自动从python搜索路径(sys.path)中查找模块

load_by_config(lib_config: dict, self_lib_path: Optional[str] = None, force_self_lib: bool = False)[源代码]

装载动态库

参数
  • lib_config (dict) –

    动态库加载配置

    is_self_lib {bool} - 是否私有库, 默认为False(直接管理类初始化的默认路径查找库文件)

    path {str} - 文件路径或加载模块的指定搜索路径, 该参数可以设置为None或不设置

    module_name {str} - 指定要加载的模块名, 如果path包含完整文件名可以不设置

    class {str} - 指定要获取的类名

    function {str} - 指定要获取的函数名

    instantiation {bool} - 是否要初始化类, 默认为False

    stand_alone {bool} - 是否生成新的独立实例(不缓存), 默认为False

    cache_id {str} - 缓存的唯一检索id, 可以设置为None

    注: 可以通过cache_id的不同控制一个类可以有多个实例的情况

    init_args {list} - 类实例的初始化固定参数, 以*args方式传入

    init_kwargs {dict} - 类实例的初始化kv参数, 以*kwargs方式传入

  • self_lib_path (str) – default=None, 查找私有库的基础路径

  • force_self_lib (bool) – default=False, 是否强制指定为私有哭(不再判断lib_config中的is_self_lib参数)

返回

根据不同情况返回不同的结果

class和function均不设置: 返回模块名

设置了class, 未设置function: 返回class类或class实例对象(instantiation为True的情况)

设置了function: 返回指定的函数对象(如果class未指定, 返回的是模块中定义的函数)

返回类型

str|object

remove_as_name(as_name: str)[源代码]

删除指定模块检索别名

参数

as_name (str) – 要删除的别名

set_as_name(module_name: str, as_name: str, class_mapping: Optional[dict] = None, as_name_first: bool = True)[源代码]

为模块获取设置检索名

参数
  • module_name (str) – 模块名

  • as_name (str) – 模块对象的检索名

  • class_mapping (dict) – default=None, 类名映射字典, key为类别名, value为真实的类名

  • as_name_first (bool) – default=True, 优先按检索名查找模块

引发

ModuleNotFoundError – 当模块名找不到模块时抛出异常

class HiveNetCore.utils.import_tool.ImportTool[源代码]

基类:object

库导入工具

提供库导入相关功能, 包括动态导入库的支持

static check_module_imported(module_name)[源代码]

检查指定模块名是否已导入

参数

module_name (string) –

要检查的模块名, 形式有以下几种:

(1)基础库的情况, 例如’sys’

(2)子库情况, 例如’simple_log.Logger’

返回

True-模块已导入, False-模块未导入

返回类型

bool

static get_attr(module_obj, attr_name)[源代码]

获取对象的指定属性( 直接使用)

参数
  • module_obj (Module) – 模块对象

  • attr_name (string) – 属性名( 类名/函数名/属性名)

返回

具体属性引用, 可以直接使用

返回类型

object

static get_imported_module(module_name)[源代码]

根据模块名称获取已导入的模块, 如果模块不存在返回None

返回

已导入的模块对象, 可以直接引用该对象执行操作

返回类型

Module

static get_member_from_module(module, member_name)[源代码]

从指定模块中获取成员对象( 例如类)

参数
  • module (Module) – 要处理的模块对象

  • member_name (string) – 成员对象名

static get_module_name(module_obj)[源代码]

获取模块名, 如果模块是包中, 模块名会包括包路径

参数

module_obj (Module) – 模块对象

返回

模块对象的名称

返回类型

string

static has_attr(module_obj, attr_name)[源代码]

检查模块或对象是否有指定名称的属性

参数
  • module_obj (Module) – 模块对象

  • attr_name (string) – 属性名( 类名/函数名/属性名)

返回

是否包含属性, True-包含, False-不包含

返回类型

bool

static import_module(module_name, as_name=None, extend_path=None, import_member=None, is_force=False)[源代码]

导入指定模块

如果不指定is_force参数强制加载, 已经加载过的模块不会重新加载, 对使用有import_member模式的 使用方式可能会存在问题

参数
  • module_name (string) – 要导入的模块名

  • as_name (string) – default=None, 对导入的模块名设置的别名

  • extend_path (string) – default=None, 对于存放在非python搜索路径( sys.path) 外的模块, 需要指定扩展搜索路径

  • import_member (string) –

    default=None, 指定导入模块对应的成员对象, None代表不指定导入对象, “*”代表导入模块的所有对象:

    效果如from module_name import import_member

  • is_force (bool) – default=False, 是否强制执行导入的命令动作, True-强制再执行导入命令, Fasle-如果模块已存在则不导入

返回

已导入的模块对象, 可以直接引用该对象执行操作

返回类型

Module

示例

lib_obj = ImportTools.import_module(‘os’)

print(lib_obj.path.realpath(‘’))

static unimport_module(module_name)[源代码]

卸载已导入的模块

参数

module_name (string) – 要卸载的模块名