Blender如何重新导入外部修改过的Python脚本(重载脚本)
Blender 2.81a 自定义模块重载及会话重置解决方案
问题原因
Python的导入机制默认会将已导入的模块缓存到sys.modules字典中,Blender进程不重启的情况下,重复执行import语句只会读取缓存内容,不会主动加载磁盘上修改后的新模块文件,因此修改内容不会生效。
通用全场景模块重载方法
该方法适配Blender 2.81a所有使用场景,无需重启Blender即可每次加载最新的模块内容,替换原有导入语句即可:
import sys import importlib def reload_custom_module(module_name: str): # 模块已缓存则先重载,再导入 if module_name in sys.modules: importlib.reload(sys.modules[module_name]) return importlib.import_module(module_name) # 替换原有 import f1, f2 语句 f1 = reload_custom_module("f1") f2 = reload_custom_module("f2") # 其余自定义模块均按上述格式导入即可
注意:如果旧版本模块已经生成了实例对象,这些实例会沿用旧版本的类/方法定义,只有重载后新生成的实例会使用更新后的代码,该特性为Python原生机制,和Blender无关。
重置Blender会话的替代方案
如果不需要保留当前场景的临时内容,可以直接执行Python语句重置整个Blender会话,会自动清空所有模块缓存、恢复到初始启动状态,效果等同于手动重启Blender:
import bpy # 重置为默认启动会话(会清空所有未保存的场景数据) bpy.ops.wm.read_homefile(use_empty=False) # 若需要完全空白的无默认场景会话,替换为下方代码 # bpy.ops.wm.read_homefile(use_empty=True)
注意:执行会话重置前请提前保存需要的工程文件,避免数据丢失。
内容的提问来源于stack exchange,提问作者rhodo
相关产品推荐
相关产品推荐

