python动态加载插件 - ling

news/2025/10/29 15:03:32/文章来源:https://www.cnblogs.com/ling-yuan/p/19174469

获取当前脚本路径

根据当前位置获取绝对路径,区分打包后的可执行文件开发环境

def get_plugins_dir(relative_path: str = "plugins") -> str:"""获取应用程序的插件目录如果是打包后的exe,返回exe所在目录如果是脚本,返回脚本所在目录"""if getattr(sys, "frozen", False):# 打包后的exepos = os.path.dirname(sys.executable)else:# 开发环境pos = os.path.dirname(os.path.abspath(__file__))pos = os.path.join(pos, relative_path)if not os.path.exists(pos):os.makedirs(pos)# 可选添加示例插件return pos

加载环境变量

使用闭包,允许热加载功能

def make_env_manager():"""设置动态加载包的环境变量"""env_path = []def inner(full_path: str):nonlocal env_path# 清空for path in list(env_path):sys.path.remove(path)# 记录环境路径env_path.append(os.path.dirname(full_path))for root, dirs, files in os.walk(full_path):if root not in sys.path:env_path.append(root)# 添加for path in env_path:sys.path.insert(0, path)return inner

加载插件

区分加载单个文件

def load_file(file_path: str, validate_func: Optional[Callable] = None):"""加载单个插件文件"""def validate_plugin(module):if not hasattr(module, "execute"):sys.modules.pop(module)raise ImportError(f"插件 {name} 缺少 execute() 函数")return Trueif validate_func is None:validate_func = validate_plugintry:name = os.path.splitext(os.path.basename(file_path))[0]spec = importlib.util.spec_from_file_location(name, file_path)if spec is None:raise ImportError(f"无法从文件创建模块规范: {file_path}")module = importlib.util.module_from_spec(spec)sys.modules[name] = modulespec.loader.exec_module(module)return module if validate_func(module) else Noneexcept Exception as e:# log errortraceback.print_exc()return Nonedef load_package(package_path: str, validate_func: Optional[Callable] = None):"""加载单个插件包"""def validate_plugin(module):if not hasattr(module, "execute"):sys.modules.pop(module)raise ImportError(f"插件 {name} 缺少 execute() 函数")return Trueif validate_func is None:validate_func = validate_plugintry:name = os.path.basename(package_path)if package_path not in sys.path:sys.path.insert(0, package_path)module = importlib.import_module(name)if validate_func(module):return moduletry:main_module = importlib.import_module(f"{name}.main")return main_module if validate_func(main_module) else Noneexcept ImportError:raise ImportError(f"插件包 {name} 中未找到可用的主模块")except Exception as e:traceback.print_exc()return None

获取所有插件

根据传入路经筛选插件

def scan_plugins(path: str) -> list[str]:file_ans = list(filter(lambda x: x != "",map(lambda name: (os.path.join(path, name)if not name.startswith(".")and not name.startswith("__")and os.path.splitext(name)[1] in [".py", ""]else ""),os.listdir(path),),))return file_ans

Example

  1. 获取插件文件夹路径

  2. 获取所有插件

  3. 加载环境变量

  4. 加载插件

if __name__ == "__main__":base_path = get_plugins_dir()p = scan_plugins(base_path)env_manager = make_env_manager()env_manager(base_path)loaded_plugins = load_plugins(p)print(loaded_plugins)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/949930.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实用指南:C++设计模式_结构型模式_适配器模式Adapter

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年混凝土预制管桩设备定做厂家权威推荐榜单:PHC管桩生产设备/PHC管桩生产线/混凝土管桩生产设备源头厂家精选

在建筑工业化和基础建设持续发展的推动下,混凝土预制管桩设备的技术水平与定制化能力已成为衡量制造商实力的关键标尺。本文基于技术研发实力、设备性能参数、定制化解决方案及市场应用反馈,对行业内的专业设备制造企…

2025年微小流量质量流量计企业权威推荐榜单:差压质量流量计/液体质量流量计/数字式质量流量计源头厂家精选

在精密制造、生物医药和半导体等高端工业领域,微小流量质量流量计作为流体测控的核心设备,其测量精度与稳定性直接关系到生产工艺效率与产品质量。当前,随着生物制药向“高效发酵”升级、新能源储能进入“规模化并网…

2025年阻燃pp管厂商权威推荐榜单:阻燃pp管厂商/塑料pp管/pp化工管源头厂家精选

2025年阻燃PP管厂商权威推荐榜单:塑料PP管/PP化工管/FRPP管源头厂家精选 在化工、矿山、污水处理等行业,阻燃PP管以其卓越的耐腐蚀性和阻燃安全性,正成为工业流体输送系统的关键材料。 阻燃PP管作为工业流体输送系统…

ArkTS语言(六)

学习ArkTS语言 ArkTS是HarmonyOS的主要应用开发语言,在TypeScript基础上进行了扩展,保留了其基本风格,并通过增强静态检查和分析来提高程序的稳定性和性能。本教程将帮助开发者掌握ArkTS的核心功能、语法及最佳实践…

rbd元数据

rbd元数据https://cloud.tencent.com/developer/article/1006283 实际操作示例的 Ceph Pool → RBD → Object → OMAP 文档Ceph Pool / RBD / Object / OMAP 完整文档1️⃣ 关键概念说明概念说明Pool Ceph 的逻辑存储…

2025 年氧舱厂家最新推荐榜,聚焦企业技术创新、产品品质与市场口碑深度解析方圆组合式/减压/盾构气压/高原平衡/实验/软体氧舱公司推荐

引言 随着医疗健康与特殊环境保障需求的不断升级,氧舱市场规模持续扩大,但行业内企业资质、技术水平与产品质量差异显著。部分企业存在资质不全、技术滞后、产品类型单一等问题,导致采购方难以精准筛选符合需求的优…

2025年进口气动塑料球阀定制厂家权威推荐榜单:进口气动超低温球阀/进口气动三片式球阀/进口气动衬氟球阀源头厂家精选

2025年进口气动塑料球阀定制厂家权威推荐榜单:进口气动超低温球阀/进口气动三片式球阀/进口气动衬氟球阀源头厂家精选 在工业流体控制领域,进口气动塑料球阀以其独特的耐腐蚀性能和定制化服务,正成为化工、医药等特…

KL 散度

http://joschu.net/blog/kl-approx.htmlKL 散度定义标准的 k1 估计KL 散度, 方差大, 应为k1 有正有负k3 也是KL 散度的无偏估计, 但是元素都是正的, 方差小很多--- 她说, 她是仙,她不是神

2025年不锈钢编织绳网柔性加工厂权威推荐榜单:不锈钢编织绳网围网/不锈钢手工编织绳网/焊接不锈钢编织绳网源头厂家精选

随着建筑装饰与防护工程需求的升级,不锈钢编织绳网市场正以年均12.3%的速度增长,2025年全球市场规模预计突破58亿美元。 不锈钢编织绳网以其耐腐蚀、高强度、柔韧性好等特点,广泛应用于动物园围网、建筑装饰、体育场…

页面增加水印及水印防删

从以下几点判断水印消失: 1.选用canvas 防止水印内容篡改 2.选用MutationObserver 监听水印的style属性是否被篡改和监听水印元素是否被删除 3.定时更新元素的z-index动态计算最大层级 watermark.js let obj = JSON.p…

onBeforeMount 和 onMounted区分总结

onBeforeMount 和 onMounted区分总结 onMounted 是每个Vue文件必不可少。onBeforeMount 在出现bug时,ai给我的方案中偶尔出现。有时他两能共存,不太能区分他两具体的用法和场景的不同。故总结一下

2025年超导电缆制造厂权威推荐榜单:铜线电缆/感温电缆/国标电缆源头厂家精选

随着全球能源转型与电力传输技术升级,超导电缆作为颠覆性输电技术载体,其制造工艺与产业化应用已成为行业焦点。本文基于技术研发实力、产品性能数据及市场应用反馈,对国内超导电缆制造企业进行综合评估,为行业用户…

Linux应用(6)——网络通信/TCP/IP - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025 年 pe 板源头厂家最新推荐榜,技术实力与市场口碑深度解析,精选优质企业pp 板 pe 板/耐腐蚀 pe 板/耐磨 pe 板公司推荐

引言 为精准推荐优质 pe 板源头厂家,塑料加工工业协会联合行业权威检测机构开展 2025 年 pe 板厂家测评工作。测评采用 “三维九项” 评价体系,从技术实力(设备先进性、研发能力、工艺成熟度)、市场表现(客户满意…

ArkTS语言(五)

学习ArkTS语言 ArkTS是HarmonyOS的主要应用开发语言,在TypeScript基础上进行了扩展,保留了其基本风格,并通过增强静态检查和分析来提高程序的稳定性和性能。本教程将帮助开发者掌握ArkTS的核心功能、语法及最佳实践…

2025 年铝塑板厂家最新推荐榜,从技术研发到市场服务多维度考量,企业综合实力与产品竞争力深度剖析网纹/磨砂/大理石/木纹/幻彩铝塑板公司推荐

引言 为精准筛选 2025 年优质铝塑板源头厂家,本次推荐榜测评由建筑材料工业协会铝塑材料分会全程指导,参考《铝塑复合板行业质量评估标准》,采用 “三维九项” 测评方法。在企业综合实力维度,通过核查生产资质(如…

小白指南:Apache DolphinScheduler 补数据功能实操演示

最近使用 Apache DolphinScheduler 调度任务,不可避免地使用到【补数据】功能,经过不断尝试,终于成功运行了【补数据】功能,以此帖记录。最近使用 Apache DolphinScheduler 调度任务,不可避免地使用到【补数据】功…

C++程序(胡言乱语版)

一个简单的九九乘法表:点击查看代码 #include<iostream>int main() {for (int i = 1; i < 10; ++i) {for (int j = 1; j <= i ; ++j) {std::cout << j << "*" << i <<…

2025 年干洗机源头厂家最新推荐榜,技术实力与市场口碑深度解析,助力精准选购干洗机设备/工业干洗机/商用干洗机/洗衣房干洗机公司推荐

引言 2025 年干洗行业持续扩容,据商业联合会洗涤洗涤用品工业协会最新测评数据显示,国内干洗机市场品牌集中度逐步提升,但仍有超 30% 采购者因信息不对称选错设备。本次推荐榜基于协会 “三维九项” 测评体系生成,…