- [x] 解析Blender插件代码加载原理, 为测试做准备
采用方法3的方式, 可以在测试中保证重新加载子模块, 是想要的方式, 代码如下:
_qk_locals = locals() def register(): if "bpy" in _qk_locals: print(">>> plugin‘s submodules reload") from importlib import reload _modules_loaded[:] = [reload(val) for val in _modules_loaded] del reload from bpy.utils import register_class for mod in _modules_loaded: for cls in mod.classes: print(‘>>> register: ‘, cls.__name__) register_class(cls)
本分析基于Blender2.79b.
- 在用户Blender插件目录下创建插件包
我的测试插件为C:\Users\yaoyu\AppData\Roaming\Blender Foundation\Blender\2.79\scripts\addons\qk_modeler
- 在
__init__.py
文件中插入输出代码, 查看效果 - 在Blender用户配置的"Add-ons"界面中, 勾选插件.
if "bpy" in locals(): print(‘reload...‘) from importlib import reload _modules_loaded[:] = [reload(val) for val in _modules_loaded] del reload
在__init__.py代码修改之后, 模块第一次重加载时会触发.
_qk_locals = locals() def register(): if "bpy" in _qk_locals: print(">>> plugin‘s submodules reload") from importlib import reload _modules_loaded[:] = [reload(val) for val in _modules_loaded] del reload from bpy.utils import register_class for mod in _modules_loaded: for cls in mod.classes: print(‘>>> register: ‘, cls.__name__) register_class(cls)
原文:https://www.cnblogs.com/yaoyu126/p/9343251.html