☰
【blender】使用Vscode进行blender调试:把调试配置改到 TaoToken 的完整实践
2026/10/17 23:06:50 网站建设 项目流程

1. Blender 插件调试为什么总在 Vscode 里翻车

如果你写过 Blender 插件,大概率经历过这个循环:在 Vscode 里改完.py,切回 Blender 点一下运行,报错信息一闪而过,或者干脆什么都不打印。Blender 自带的 Text Editor 没有代码补全、没有断点、没有变量面板,稍微复杂一点的插件项目根本没法调。于是大家都会去装jacqueslucke.blender-development这个 Vscode 扩展,用Blender: Start和Blender: Run Script来跑脚本。

但真正上手之后,问题一个接一个冒出来。最常见的就是ModuleNotFoundError:你在 Vscode 里明明pip install过的包,到了 Blender 里就找不到。原因很简单,Blender 自带一套独立的 Python 解释器,路径通常是blender-3.6.18-windows-x64/3.6/python/bin/python.exe,它和你系统里的 Conda、Pyenv、系统 Python 完全隔离。你在 Vscode 终端里装的tqdm、requests,不会自动出现在 Blender 的 Python 里。

第二个坑是断点不生效。你在 Vscode 里打了红点,按 F5 启动,结果 Blender 那边脚本跑完了,断点一次都没停。这通常是因为调试器附加的进程和实际执行脚本的进程不是同一个,或者launch.json里的program指向了错误的入口文件。

第三个坑是argparse报unrecognized arguments。Blender 通过 Vscode 扩展运行脚本时,会自动往命令行塞一堆参数,比如--python c:\Users\xxx\.vscode\extensions\...\launch.py。如果你的脚本顶层写了parser.parse_args(),它就会因为这些不认识的参数直接崩掉。

这篇内容就是围绕这些真实场景展开的。我会给出可复制的launch.json和settings.json片段,演示怎么把调试请求的 endpoint 和鉴权改到 TaoToken,然后跑通一次完整的断点调试流程。适合正在做 Blender 插件开发、被调试环境折磨过的朋友。核心检索词就三个:Blender、Vscode、调试。下面从环境准备开始,一步步来。

2. 前置准备:TaoToken 接入与 Blender 调试环境搭建

在讲配置之前,先把两件事准备好:一是 Blender 侧的 Python 环境,二是 TaoToken 的接入信息。这两件事没搞定,后面的launch.json配得再漂亮也跑不起来。

先说 Blender 的 Python 环境。假设你的 Blender 装在D:\Software\blender-3.6.18-windows-x64,那么它的 Python 解释器路径就是:

D:\Software\blender-3.6.18-windows-x64\3.6\python\bin\python.exe

你要往这个解释器里装依赖,不能直接pip install,得用完整路径调用:

D:\Software\blender-3.6.18-windows-x64\3.6\python\bin\python.exe -m ensurepip D:\Software\blender-3.6.18-windows-x64\3.6\python\bin\python.exe -m pip install tqdm requests

ensurepip是防止 Blender 自带的 Python 没有 pip。装完之后,你可以用下面这条命令验证:

D:\Software\blender-3.6.18-windows-x64\3.6\python\bin\python.exe -c "import tqdm; print(tqdm.__version__)"

能打印出版本号,说明 Blender 的 Python 环境已经能识别这个包了。这一步很关键,因为后面调试时脚本里from tqdm import tqdm能不能过,全看这里。

再说 TaoToken 的接入。TaoToken 提供的是兼容 OpenAI 风格的 API 接口,Base URL 是https://taotoken.net/api,你需要在控制台生成一个 API Key。这个 Key 后面会写进调试配置里,用来让调试过程中的模型请求走 TaoToken 的通道。具体来说,你需要在 Vscode 的调试配置里设置环境变量,把OPENAI_BASE_URL指向 TaoToken,把OPENAI_API_KEY设成你生成的 Key。

如果你还没生成 Key,可以去控制台的 API Keys 页面创建一个。地址是:

https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite

生成之后先复制保存,后面配置里要用。另外,如果你打算长期做插件开发、经常需要跑 Agent 类的调试任务,可以了解一下 Coding Plan,它更适合高频调用场景:

https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite

环境准备好之后,还要确认 Vscode 里装了jacqueslucke.blender-development扩展。这个扩展是 Blender 官方推荐的 Vscode 调试工具,装完之后在命令面板里能搜到Blender: Start、Blender: Run Script、Blender: Build and Start这些命令。装好扩展、装好 Blender Python 依赖、拿到 TaoToken Key,三件事齐了,就可以进配置环节。

3. 可复制配置:launch.json 与 settings.json 完整片段

这一节是全文的核心,直接给可复制的配置。我会把launch.json、settings.json以及一个用于验证的main.py都写出来,你照着改路径就能用。

先看launch.json。这个文件放在项目根目录的.vscode文件夹下。它的作用是告诉 Vscode 怎么启动 Blender、怎么附加调试器、怎么把环境变量传进去。

{ "version": "0.2.0", "configurations": [ { "name": "Blender: Debug Plugin", "type": "python", "request": "launch", "program": "${workspaceFolder}/main.py", "console": "integratedTerminal", "justMyCode": false, "env": { "OPENAI_BASE_URL": "https://taotoken.net/api", "OPENAI_API_KEY": "sk-你的TaoToken密钥", "BLENDER_USER_SCRIPTS": "${workspaceFolder}" }, "envFile": "${workspaceFolder}/.env", "python": "D:\\Software\\blender-3.6.18-windows-x64\\3.6\\python\\bin\\python.exe", "args": [], "cwd": "${workspaceFolder}" }, { "name": "Blender: Attach", "type": "python", "request": "attach", "connect": { "host": "127.0.0.1", "port": 5678 }, "justMyCode": false, "pathMappings": [ { "localRoot": "${workspaceFolder}", "remoteRoot": "${workspaceFolder}" } ] } ] }

这里有几个点要解释。program指向你的入口脚本main.py,python指向 Blender 自带的解释器,这样断点才会在正确的进程里生效。justMyCode设为false,是为了能跟进 Blender 内部的bpy调用栈,排查问题时很有用。env里把OPENAI_BASE_URL和OPENAI_API_KEY设好,调试过程中脚本发起的模型请求就会走 TaoToken。envFile是可选的,如果你不想把 Key 写在launch.json里,可以放到.env文件,然后在这里引用。

再看settings.json。这个文件同样放在.vscode下,主要配置 Python 解释器路径和 Blender 扩展的行为。

{ "python.defaultInterpreterPath": "D:\\Software\\blender-3.6.18-windows-x64\\3.6\\python\\bin\\python.exe", "python.analysis.extraPaths": [ "${workspaceFolder}", "D:\\Software\\blender-3.6.18-windows-x64\\3.6\\scripts\\modules" ], "blender.executables": [ { "path": "D:\\Software\\blender-3.6.18-windows-x64\\blender.exe", "name": "Blender 3.6.18" } ], "blender.addon.reloadOnSave": true, "files.associations": { "*.py": "python" } }

python.analysis.extraPaths里加了 Blender 的scripts/modules目录,这样 Vscode 的 Pylance 才能识别bpy、bpy_extras这些模块,不会满屏红线。blender.addon.reloadOnSave设为true,保存脚本时扩展会自动重载插件,省去手动重启的麻烦。

最后给一个用于验证的main.py。这个脚本故意写得简单,但包含了几个容易踩坑的点:不用argparse、用traceback打印完整异常、把模型请求指向 TaoToken。

import os import sys import traceback sys.path.append(os.path.dirname(os.path.abspath(__file__))) def main(): print("Start script inside Blender") print("Base URL:", os.environ.get("OPENAI_BASE_URL")) print("Key prefix:", os.environ.get("OPENAI_API_KEY", "")[:8]) 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: run_pipeline(args) print("Script completed successfully.") except Exception: print("Exception occurred:") traceback.print_exc() def run_pipeline(args): print("Running pipeline with:", args.json) import tqdm for i in tqdm.tqdm(range(3), desc="processing"): print("step", i) if __name__ == "__main__": main()

注意这里没有用if __name__ == '__main__'作为唯一入口,而是直接调用main()。因为 Blender 通过runpy.run_path()执行脚本时,__name__不等于__main__,如果你把逻辑全放在if __name__ == '__main__'里面,它根本不会执行。这是很多人第一次调试时遇到的「脚本跑了但没输出」的根因。

4. 验证请求:跑通一次完整断点调试

配置写完之后,要验证它真的能跑。这一节我按操作顺序走一遍,从启动 Blender 到断点命中,再到确认 TaoToken 请求生效。

第一步,在 Vscode 里打开你的插件项目,确认.vscode/launch.json和.vscode/settings.json都在。然后在main.py的run_pipeline函数里,for i in tqdm.tqdm(...)这一行左侧点一下,打一个红点断点。

第二步,按Ctrl+Shift+P打开命令面板,输入Blender: Start,选择你配置好的 Blender 3.6.18 路径。这时候 Blender 会启动,Vscode 底部状态栏会显示 Blender 已连接。等 Blender 界面完全加载出来,再进行下一步。

第三步,回到 Vscode,按 F5 或者点击「运行和调试」面板里的Blender: Debug Plugin。这时候调试器会启动,终端里应该能看到类似这样的输出:

Start script inside Blender Base URL: https://taotoken.net/api Key prefix: sk-xxxxx Running pipeline with: scene_json/6.json

如果断点配置正确,执行到for i in tqdm.tqdm(...)那一行时,Vscode 会停下来,左侧变量面板能看到args对象、i的值。你可以按 F10 单步跳过,按 F11 单步进入,观察tqdm的迭代过程。这就是断点生效的标志。

第四步,验证 TaoToken 请求。在run_pipeline里加一段调用模型接口的代码,比如用requests发一个 chat completions 请求:

import requests import json def call_model(prompt): base_url = os.environ.get("OPENAI_BASE_URL") api_key = os.environ.get("OPENAI_API_KEY") url = f"{base_url}/v1/chat/completions" headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" } payload = { "model": "gpt-4o-mini", "messages": [{"role": "user", "content": prompt}] } resp = requests.post(url, headers=headers, data=json.dumps(payload), timeout=30) print("status:", resp.status_code) print("body:", resp.text[:200]) return resp.json()

在断点停下之后,在调试控制台里手动调用call_model("hello"),观察返回。如果status是 200,body里有正常的choices字段,说明请求已经通过 TaoToken 走通了。如果返回 401,说明 Key 没配对;如果返回连接错误,说明 Base URL 写错了。这一步能把「配置对不对」和「网络通不通」两个问题分开定位。

第五步,确认调试器附加模式。如果你不想每次按 F5 重启,可以用Blender: Attach配置。先在 Blender 的 Python 里插入import debugpy; debugpy.listen(5678),然后 Vscode 里选Blender: Attach启动,就能附加到已经运行的 Blender 进程上。这种方式适合调试长时间运行的插件,不用反复重启 Blender。

整个流程跑下来,你应该能看到:Blender 启动、脚本执行、断点命中、变量可见、TaoToken 请求返回 200。这五件事都成立,调试环境就算搭好了。

5. 常见报错排查:401、ModuleNotFoundError 与断点失效

配置跑通之前,大概率会撞上几个典型报错。这一节我把最常见的几个列出来,对照着排查。

第一个是ModuleNotFoundError: No module named 'tqdm'。这个报错说明 Blender 自带的 Python 里没装这个包。解决办法就是用 Blender 的 Python 完整路径去装:

D:\Software\blender-3.6.18-windows-x64\3.6\python\bin\python.exe -m pip install tqdm

装完之后,在 Vscode 的调试控制台里执行import sys; print(sys.executable),确认输出的是 Blender 的 Python 路径,而不是系统 Python。如果输出的是系统 Python,说明launch.json里的python字段没生效,检查路径有没有写错。

第二个是ModuleNotFoundError: No module named 'membank',也就是你自己的包找不到。这是因为 Blender 执行脚本时,工作目录和sys.path跟你预期的不一样。解决办法是在脚本顶部手动把项目根目录加进去:

import sys import os sys.path.append(os.path.dirname(os.path.abspath(__file__)))

注意__file__在 Blender 的runpy环境下可能不是你想象的值,更稳妥的写法是写死项目根目录,或者用环境变量传进去。

第三个是 401 错误。如果你在调试控制台里看到status: 401,说明 TaoToken 的 Key 没配对。检查三件事:launch.json里的OPENAI_API_KEY是不是完整的 Key、有没有多余空格、.env文件里的值有没有被覆盖。可以在脚本里打印 Key 的前 8 位确认:

print("Key prefix:", os.environ.get("OPENAI_API_KEY", "")[:8])

如果打印出来是空的,说明环境变量根本没传进去,检查launch.json的env字段拼写。

第四个是local proxy failed或者连接超时。这类报错通常是 Base URL 写错了。TaoToken 的 API 地址是https://taotoken.net/api,注意结尾没有斜杠,拼接路径时是{base_url}/v1/chat/completions。如果你写成https://taotoken.net/api/,拼出来就会多一个斜杠,某些 HTTP 客户端会报错。

第五个是断点不生效。表现是脚本跑完了,断点一次没停。排查顺序:先确认launch.json里justMyCode是false;再确认program指向的入口文件和你实际执行的是同一个;最后确认 Vscode 的 Python 扩展版本和 Blender 扩展版本兼容。如果还是不行,改用Blender: Attach模式,手动debugpy.listen再附加,通常能绕过这个问题。

第六个是argparse报unrecognized arguments。这个前面提过,根因是 Blender 往命令行塞了额外参数。解决办法就是别用argparse,改用一个简单的Args类手动构造参数:

class Args: json = "scene_json/6.json" output_dir = "output/6" wall_height = 3.2 export_glb = False args = Args()

这样不管 Blender 传什么参数进来,你的脚本都不受影响。

第七个是reading choices相关的解析错误。如果你在脚本里手动解析模型返回的 JSON,遇到choices字段读不到,先打印完整的resp.text看看返回结构。有时候是模型名写错了,有时候是请求体格式不对。TaoToken 兼容 OpenAI 格式,model字段填gpt-4o-mini这类标准名称即可。

排查的时候有个通用技巧:在except里用traceback.print_exc()而不是只print(e)。前者会打印完整的调用栈和出错行号,后者只给一行信息,定位问题效率差很多。

6. 把调试链路固定下来:TaoToken 接入与后续扩展

配置跑通一次之后,建议把整套东西固定成项目模板,下次开新插件直接复制。具体做法是在项目根目录建一个.vscode文件夹,把launch.json、settings.json、.env三个文件放进去,.env里只写 Key,launch.json里用envFile引用。这样 Key 不会进版本控制,团队协作时各自填自己的。

TaoToken 的接入点主要有三个:模型对话用于快速验证接口通不通,API Keys 用于生成和管理密钥,接入文档用于查具体的请求格式和参数。调试过程中如果遇到鉴权或路径问题,优先查文档。

https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite

如果你用的是 Claude Code 做插件开发,TaoToken 也支持 Anthropic 风格的接入,配置方式类似,把 Base URL 和 Key 填到对应的环境变量里就行。长期做 Agent 类调试的话,Coding Plan 的额度更适合高频场景。

最后说一个实际经验:Blender 插件调试最耗时间的不是写代码,而是环境隔离带来的各种「找不到模块」「断点不生效」。把 Blender 的 Python 路径、sys.path追加、launch.json的python字段这三件事一次性配对,后面基本就不会再被这类问题卡住。调试配置这东西,配一次省半年。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询