【blender】使用Vscode进行blender调试

发布于:2025-07-18 ⋅ 阅读:(18) ⋅ 点赞:(0)

配置vscode+blender

直接使用blender中的text editor没有代码补全,终端输出通常和blender不在同一个页面,只适合非常简单的代码测试。使用Vscode能有效提高blender调试的效率,具体方式见:VSCode 开发 Blender脚本工具配置

调试进阶版(包含遇到的一些错误的解决方法)

一般来说,调试步骤是这样的:

  1. Ctrl+shift+P 选择 Blender: Start,然后选择你的blender的exe路径
  2. Ctrl+shift+P 选择 Blender: Run Scrip(如果你写好脚本的话,也就是.py文件)

但是上面的步骤看起来只适合单个文件,如果你需要对非常大型的项目进行调试的话,执行上面的步骤非常可能出错。

错误1:无法识别模块

  File "D:\Software\blender-3.6.18-windows-x64\3.6\python\lib\runpy.py", line 96, in _run_module_code
    _run_code(code, mod_globals, init_globals,
  File "D:\Software\blender-3.6.18-windows-x64\3.6\python\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "e:\temp\scene\main.py", line 3, in <module>
    from membank.utils.f import download_assets
ModuleNotFoundError: No module named 'membank'
Location: D:\Software\blender-3.6.18-windows-x64\3.6\scripts\modules\bpy\ops.py:111

这里 membank 是用户自定义的模块(也就是包含__init__.py文件的一个文件夹),但是在执行 Blender: Run Scrip后无法检测到,原因是:Blender 自带了一套 Python 解释器(这里的是 D:\Software\blender-3.6.18-windows-x64\3.6\python\bin\python.exe),它和系统里的 Anaconda / Miniconda 或其他 Python 环境是隔离的。

解决方法:
将本地代码(通常是你run script时的那个脚本)加入 sys.path

import sys

sys.path.append('membank目录的上级目录')

from membank.xxxx import yyy # 正常导入

错误2:无法检测到xxx包(python环境)

  File "e:\temp\scene\main.py", line 6, in <module>
    from membank.utils.f import download_assets
  File "E:\temp\scene\membank\utils\f.py", line 4, in <module>
    from membank.utils.pipeline import PipelineContext
  File "E:\temp\scene\membank\utils\pipeline.py", line 6, in <module>
    from tqdm import tqdm
ModuleNotFoundError: No module named 'tqdm'
Location: D:\Software\blender-3.6.18-windows-x64\3.6\scripts\modules\bpy\ops.py:111

这个问题的核心是:

ModuleNotFoundError: No module named 'tqdm'

也就是说,Blender 自带的 Python 环境中 没有安装 tqdm 模块(一个常用的进度条库),所以你的脚本在导入时失败了。


✅ 为什么会出现这种情况?

Blender 内部使用的是 独立的 Python 解释器,它和你用 Conda、Pyenv、系统 Python 是隔离的。你平常在 VSCode 里 pip install tqdm 安装的模块,并不会自动出现在 Blender 的 Python 中。


✅ 解决方案:在 Blender 的 Python 环境里安装 tqdm

🧩 步骤如下:
  1. 打开 CMD 或 PowerShell

  2. 进入 Blender 的 Python 路径(3.6 目录下)
    通常在这个路径下:

D:\Software\blender-3.6.18-windows-x64\3.6\python\bin\python.exe
  1. 安装 pip(如果还没安装)
D:\Software\blender-3.6.18-windows-x64\3.6\python\bin\python.exe -m ensurepip
  1. 用 Blender 的 Python 安装 tqdm
D:\Software\blender-3.6.18-windows-x64\3.6\python\bin\python.exe -m pip install tqdm

错误3:参数错误(argparse解析错误)

Got POST: {'type': 'script', 'path': 'e:\\temp\\scene\\main.py'}
127.0.0.1 - - [17/Jul/2025 00:12:54] "POST / HTTP/1.1" 200 -

看起来我已经成功发送了请求 但是没有任何响应,连打印的结果都没有出现

你这边遇到的情况是:Blender 调用了你的 main.py,但是没有任何输出,甚至 print() 的内容也没有出现。这通常有以下几种可能原因:


✅ 1. 脚本逻辑本身没有进入你以为执行的部分

例如你写了:

if __name__ == '__main__':
    print("Hello")

⚠️在 Blender 中通过 runpy.run_path() 执行脚本时,__name__ != '__main__',所以这段代码不会运行!


✅ 正确做法

你应该把你要执行的内容,直接放到脚本的顶层或者函数中,例如:

def main():
    print("This is running in Blender")

main()

✅ 2. Blender 执行了脚本,但被某个隐藏的错误中断了

这时不会有明显错误信息,除非你加上调试或 try-except。

如果哪一步失败了,打印的信息可以帮你定位。


✅ 3. args 根本没传入,或者你在顶层用到了 argparse

Blender 运行 .py 脚本不会传递 sys.argv 给你像 argparse 那样使用。

如果你有类似:

args = parser.parse_args()

这在 Blender 中通常不会得到你期望的参数。

你遇到的错误是:

main.py: error: unrecognized arguments: --python c:\Users\ASUS\.vscode\extensions\jacqueslucke.blender-development-0.0.25\pythonFiles\launch.py

✅ 问题本质:

你的 main.py 使用了 argparse 解析命令行参数:

parser = argparse.ArgumentParser()
args = parser.parse_args()

但是在 Blender 中通过 VSCode 插件运行 Python 脚本时,它会自动向你的脚本传入一堆你 没有定义的参数,例如:

--python c:\xxx\launch.py

于是 argparse 报错:unrecognized arguments


✅ 解决方案:不要用 argparse,而是手动构造参数类

最推荐用于 Blender 调试:

class Args:
    json = "scene_json/6.json"
    output_dir = "output/6"
    input_image = ""
    input_text = ""
    input_scene = "scene_json/6.json"
    wall_height = 3.2
    export_glb = False

args = Args()

然后直接调用你的主函数:

test_export2blender(args)

这样你在 VSCode + Blender 插件调试中,就能看到逐步输出和错误信息了。


不过except Exception as e: print("Exception occurred:", e) 这种写法无法显示具体是哪一行代码出错。

为了 在 VSCode + Blender 插件中调试时获得详细错误信息,你可以使用 traceback 模块来打印完整的异常栈信息。

import traceback

def main():
    print("Start script inside Blender")

    class Args:
        json = "scene_json/6.json"
        output_dir = "output/6"
        input_image = ""
        input_text = ""
        input_scene = "scene_json/6.json"
        wall_height = 3.2
        export_glb = False

    args = Args()

    try:
        test_export2blender(args)
        print("Script completed successfully.")
    except Exception as e:
        print("Exception occurred:")
        traceback.print_exc()


网站公告

今日签到

点亮在社区的每一天
去签到