在VS Code中加载Blender Addon会出现“未命名模块...”错误

问题描述

我正在尝试使用VS Code和出色的Blender addon来启动旧的Addon。我的文件结构如下:

  • __ init__.py#主初始化
  • bnr /
    • misc /
    • 操作员/
    • 面板/
    • 属性/
    • __ init__.py#空初始化

现在,当我尝试通过发出命令Blender: Build and Start启动插件时,在控制台ModuleNotFoundError: No module named 'bnr.operators'中收到以下错误,该错误__init__.py文件中的这一行引起:

from bnr.operators.load_nodes import NODE_EDITOR_OP_LoadNodes

我猜我还没有设置一些重要的设置,但是我不知道哪个设置。我的__init__.py文件和设置如下:

__init__.py

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License,or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTIBILITY or fitness FOR A PARTIculaR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not,see <http://www.gnu.org/licenses/>.

bl_info = {
    "name": "Node Renderer","author": "xxx","description": "An Addon for Blender that can automatically vary a set of node parameters based on user defined criteria and render each variation.","blender": (2,80,0),"version": (0,1),"location": "Node Editor Toolbar under Render","category": "Node",# Used for filtering in the addons panel
}

import bpy
from bpy.props import PointerProperty,BoolProperty,BoolVectorProperty

from bnr.operators.load_nodes import NODE_EDITOR_OP_LoadNodes
from bnr.operators.parameter_setup import (
    NODE_EDITOR_OP_SaveParameterSetup,NODE_EDITOR_OP_LoadParameterSetup,NODE_EDITOR_OP_LoadDefaultParameters
)
from bnr.operators.render import NODE_OP_Render
from bnr.panels.nodes_panel import NODE_EDITOR_PT_NodesPanel
from bnr.panels.settings_panel import NODE_EDITOR_PT_SettingsPanel
from bnr.properties.properties import (
    PG_PublicProps,PG_InternalProps,PG_ParameterEliminationProperties
)
from bnr.properties.socket_props import (
    FLOAT_SOCKET_PG_UserProperties,FLOAT_FACTOR_SOCKET_PG_UserProperties,FLOAT_VECTOR_SOCKET_PG_UserProperties,COLOR_SOCKET_PG_UserProperties,)

from bnr.operators.eliminate_parameters import NODE_OP_EliminateParameters

panels = (
    NODE_EDITOR_PT_SettingsPanel,NODE_EDITOR_PT_NodesPanel,)

operators = (
    NODE_OP_Render,NODE_EDITOR_OP_LoadNodes,NODE_EDITOR_OP_SaveParameterSetup,NODE_EDITOR_OP_LoadDefaultParameters,NODE_OP_EliminateParameters,)

properties = (
    PG_PublicProps,PG_ParameterEliminationProperties,FLOAT_SOCKET_PG_UserProperties,)

VEC_TYPES = (bpy.types.NodeSocketVectorXYZ,bpy.types.NodeSocketVector,bpy.types.NodeSocketVectoracceleration,bpy.types.NodeSocketVectorDirection,bpy.types.NodeSocketVectorTranslation,bpy.types.NodeSocketVectorEuler)

def register():
    for c in (*properties,*operators,*panels):
        bpy.utils.register_class(c)

    # Register the properties on the scene object so it is accessible everywhere
    bpy.types.Scene.props = PointerProperty(type=PG_PublicProps)

    # Register our internal props on the Scene object
    bpy.types.Scene.internal_props = PointerProperty(type=PG_InternalProps)

    # Register internal properties for parameter elimination
    bpy.types.Scene.pe_props = PointerProperty(type=PG_ParameterEliminationProperties)

    # Register boolean property on the node type
    bpy.types.Node.node_enabled = BoolProperty(default=False)
    bpy.types.Node.node_show = BoolProperty(default=False)

    # Register boolean property on the NodeSocket type
    bpy.types.NodeSocketStandard.input_enabled = BoolProperty(default=False)
    bpy.types.NodeSocketStandard.input_show = BoolProperty(default=False)

    bpy.types.NodeSocketFloat.user_props = PointerProperty(type=FLOAT_SOCKET_PG_UserProperties)
    bpy.types.NodeSocketFloatFactor.user_props = PointerProperty(type=FLOAT_FACTOR_SOCKET_PG_UserProperties)
    bpy.types.NodeSocketColor.user_props = PointerProperty(type=COLOR_SOCKET_PG_UserProperties)

    # Override input_enabled for vector types (as we keep x,y and z as separate inputs)
    bpy.types.NodeSocketColor.subinput_enabled = BoolVectorProperty(default=(False,False,False))

    # Register user props on vector types
    for t in VEC_TYPES:
        default_min = FLOAT_VECTOR_SOCKET_PG_UserProperties.bl_rna.properties["user_min"]
        default_max = FLOAT_VECTOR_SOCKET_PG_UserProperties.bl_rna.properties["user_max"]
        subtype = t.bl_rna.properties["default_value"].subtype
        subtype = subtype if len(subtype) > 0 else "NONE"

        VectorPropertyType = type(
            "FLOAT_VECTOR_SOCKET_PG_UserProperties",(bpy.types.PropertyGroup,),{
                "user_min": bpy.props.FloatVectorProperty(
                    name=default_min.name,default=default_min.default_array,description=default_min.description,subtype=subtype),"user_max": bpy.props.FloatVectorProperty(
                    name=default_max.name,default=default_max.default_array,description=default_max.description,subtype=subtype)
            })
        bpy.utils.register_class(VectorPropertyType)
        t.user_props = PointerProperty(type=VectorPropertyType)
        t.subinput_enabled = BoolVectorProperty(default=(False,False))


def unregister():
    for c in (*properties,*panels):
        bpy.utils.unregister_class(c)

    del bpy.types.Scene.props
    del bpy.types.Scene.internal_props
    del bpy.types.Node.node_enabled
    del bpy.types.Node.node_show
    del bpy.types.NodeSocketStandard.input_enabled
    del bpy.types.NodeSocketStandard.input_show
    del bpy.types.NodeSocketFloat.user_props

    for t in (*VEC_TYPES,bpy.types.NodeSocketColor):
        del t.user_props
        del t.subinput_enabled

用户设置JSON

{
    "[json]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode"
    },"[javascript]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode"
    },"window.zoomLevel": 0,"C_Cpp.updateChannel": "Insiders","markdown-pdf.headerTemplate": "<div style=\"font-size: 9px; margin-left: auto; margin-right: 1cm; \"> <span class='date'></span></div>","blender.executables": [
        {
            "path": "c:\\Program Files\\Blender Foundation\\Blender 2.82\\blender.exe","name": "","isDebug": false
        }
    ],"blender.addon.moduleName": "bnr","explorer.confirmDelete": false,"terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe"
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)