【问题标题】:Blender Python - Force reload of module while importing all its classesBlender Python - 在导入所有类时强制重新加载模块
【发布时间】:2021-11-21 18:11:55
【问题描述】:

我正在使用 Python/Blender 进行开发,这里有两个需求:

  1. 从我的模块中导入所有单独的类(因为它们都必须在 blender 中注册)
  2. 每次执行脚本时都重新加载模块本身(以防止在我开发插件时缓存并按“重新加载脚本”)

目前我正在这样做(__init__.py):

from importlib import reload
from .MyPlugin import *

reload(MyPlugin)

classes = [ClassA, ClassB, ClassC]
# register each class, not shown here

但是reload(MyPlugin) 行会导致错误:“MyPlugin 未定义”。

最初我尝试重新加载每个类,但它引发了reload 需要模块的错误。

【问题讨论】:

  • 使用import MyPlugin然后你可以重新加载它
  • @Jean-FrançoisFabre 是的,但是我怎样才能获得每个单独的课程?我试过inspect.getmembers(MyModule, inspect.isclass),但列表返回空。模块中的类类似于class MyProperties(bpy.types.PropertyGroup):
  • 我无法重现,当我使用相同的函数和谓词检查模块时,我可以看到类
  • 那一定是 Blender 执行上下文的问题。

标签: python python-3.x blender


【解决方案1】:

一些同事帮我解答了,最后的结果是__init__.py

from importlib import reload

if "MyModule" in locals():
    reload(MyModule)
else:
   import MyModule

from .MyModule import *

这里有详细说明:https://blenderartists.org/t/how-to-reload-add-on-code/1202715/2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-10
    • 2014-05-16
    • 2014-03-30
    • 2018-01-06
    • 2010-10-20
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    相关资源
    最近更新 更多