配置vscode+blender
直接使用blender中的text editor没有代码补全,终端输出通常和blender不在同一个页面,只适合非常简单的代码测试。使用Vscode能有效提高blender调试的效率,具体方式见:VSCode 开发 Blender脚本工具配置。
调试进阶版(包含遇到的一些错误的解决方法)
一般来说,调试步骤是这样的:
- Ctrl+shift+P 选择
Blender: Start
,然后选择你的blender的exe路径 - 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
python
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
🧩 步骤如下:
-
打开 CMD 或 PowerShell
-
进入 Blender 的 Python 路径(3.6 目录下)
通常在这个路径下:
powershell
D:\Software\blender-3.6.18-windows-x64\3.6\python\bin\python.exe
- 安装 pip(如果还没安装)
bash
D:\Software\blender-3.6.18-windows-x64\3.6\python\bin\python.exe -m ensurepip
- 用 Blender 的 Python 安装 tqdm
bash
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. 脚本逻辑本身没有进入你以为执行的部分
例如你写了:
python
if __name__ == '__main__':
print("Hello")
⚠️在 Blender 中通过 runpy.run_path()
执行脚本时,__name__ != '__main__'
,所以这段代码不会运行!
✅ 正确做法
你应该把你要执行的内容,直接放到脚本的顶层或者函数中,例如:
python
def main():
print("This is running in Blender")
main()
✅ 2. Blender 执行了脚本,但被某个隐藏的错误中断了
这时不会有明显错误信息,除非你加上调试或 try-except。
如果哪一步失败了,打印的信息可以帮你定位。
✅ 3. args
根本没传入,或者你在顶层用到了 argparse
Blender 运行 .py
脚本不会传递 sys.argv
给你像 argparse
那样使用。
如果你有类似:
python
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
解析命令行参数:
python
parser = argparse.ArgumentParser()
args = parser.parse_args()
但是在 Blender 中通过 VSCode 插件运行 Python 脚本时,它会自动向你的脚本传入一堆你 没有定义的参数,例如:
--python c:\xxx\launch.py
于是 argparse
报错:unrecognized arguments
✅ 解决方案:不要用 argparse
,而是手动构造参数类
最推荐用于 Blender 调试:
python
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()
然后直接调用你的主函数:
python
test_export2blender(args)
这样你在 VSCode + Blender 插件调试中,就能看到逐步输出和错误信息了。
不过except Exception as e: print("Exception occurred:", e)
这种写法无法显示具体是哪一行代码出错。
为了 在 VSCode + Blender 插件中调试时获得详细错误信息,你可以使用 traceback 模块来打印完整的异常栈信息。
python
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()