HiveNetCore.utils.import_tool module¶
库导入工具
- class HiveNetCore.utils.import_tool.DynamicLibManager(base_lib_path: str)[源代码]¶
基类:
object动态库加载管理类
- 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: 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: list = None, init_kwargs: dict = None, stand_alone: bool = False, cache_id: 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: str = None, module_name: str = None, as_name: str = None, class_mapping: 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: 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
- set_as_name(module_name: str, as_name: str, class_mapping: 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(‘’))