Удалённая отладка Python во внешнем окружении. Пример с Blender
- Опубликовано
- • 2 мин чтения•--- просмотров
Иногда нужно отлаживать Python-код, который выполняется во внешнем окружении, из локальной IDE. В этом туториале я разберу ситуацию, когда Python-скрипт выполняется в Blender. Мне нужно поставить точку останова, посмотреть значения переменных и пройтись по скрипту шаг за шагом. Покажу два способа — для VSCode и PyCharm.
PyCharm
Этот способ проще и более автоматизирован — почти из коробки. Сначала нужно добавить специальную конфигурацию запуска, затем установить библиотеку pydevd-pycharm. В скрипте, который будет выполняться в Blender, добавь следующую команду для подключения к серверу отладки. На скриншотах ниже показано всё, а код, который нужно встроить в свой скрипт, приведён рядом.

# Debug server
import logging
import sys
def connect_debug_server() -> None:
logging.debug(f"Python path used by Blender: {sys.executable}")
import pydevd_pycharm
pydevd_pycharm.settrace('localhost', port=2020)
Затем запусти конфигурацию в PyCharm и выполни скрипт в Blender. IDE остановится на точке останова.
VSCode
Способ для VSCode похож, только используется библиотека debugpy. Ниже — скрипт для подключения к серверу отладки и конфигурация, которую нужно добавить в launch.json. Порядок действий такой: сначала запусти скрипт в Blender — он будет ждать подключения к серверу отладки. Затем запусти конфигурацию из launch.json, и IDE остановится на точке останова.
// Configuration for launch.json
{
"name": "Attach to Blender (debugpy)",
"type": "python",
"request": "attach",
"connect": {
"host": "127.0.0.1",
"port": 5678
},
"justMyCode": false
},
# Debug server
import logging
import sys
def connect_debug_server(host="127.0.0.1", port=5678, wait=False):
logging.debug(f"Blender Python: {sys.executable}")
try:
import debugpy
except Exception as e:
logging.error(f"debugpy not available: {e}")
return
try:
debugpy.listen((host, port)) # process listens on address:port
print(f"[debugpy] listening on {host}:{port}")
if wait:
print("[debugpy] waiting for VS Code to attach…")
debugpy.wait_for_client() # will stop here until attached
debugpy.breakpoint()
# optional: immediately catch the execution flow
except Exception as e:
logging.exception(f"debugpy.listen failed: {e}")


Открыт для работы по контракту
Я доступен для работы по контракту. Если у вас есть интересная идея проекта — запишитесь на звонок через Calendly.
Записаться на 30-минутный звонок