К содержанию
fohbook/ TouchDesigner
уверенный

Ошибки Python и модулей

Импорт не работает, скрипт молчит, колбэк перестал вызываться: где смотреть и что чинить.

Python в TouchDesigner ломается предсказуемо. Первое действие всегда одно: открыть Textport (Alt+T).

Импорт не работает

ModuleNotFoundError — самая частая ошибка. Проверяйте по порядку:

  1. Версия Python. Пакет должен быть собран под ту же версию, что в TouchDesigner (в актуальных сборках — 3.11). Пакет для 3.10 не подхватится.
  2. Разрядность — только 64 бита.
  3. Путь. Edit → Preferences → General: включён ли Add External Python to Search Path и указан ли путь в Python 64-bit Module Path. Несколько путей разделяются ;.
  4. Перезапуск. Изменение путей требует перезапуска TouchDesigner.
  5. Проверка изнутри:
import sys
for p in sys.path: print(p)

Подробно — Внешние модули.

Импорт «работает», но всё падает

Признак подмены встроенных пакетов. TouchDesigner использует собственные numpy и OpenCV; параллельная версия из вашего окружения приводит к падениям без сообщений — иногда через час работы.

Решение: не подключать конфликтующие версии, а изолировать библиотеку в отдельном процессе.

Скрипт не выполняется

Симптом Причина
Ничего не происходит и нет ошибок Колбэк не включён параметром узла
Колбэк был и перестал Внутри было исключение — смотрите Textport
Скрипт работает один раз Он и должен: это не цикл
print ничего не печатает Смотрите не в тот Textport (у Engine COMP свой)

Оборачивайте содержимое колбэков в try/except и пишите ошибку в лог: молча переставший работать колбэк — худший вид отказа.

Типовые сообщения

AttributeError: 'NoneType' object has no attribute ...op('имя') вернул None: узел не найден. Проверьте путь и то, откуда он считается (относительные пути зависят от места) — Ссылки.

Cannot modify network during cook — изменение структуры сети из скрипта, выполняющегося внутри кука. Лечится отложенным запуском:

run("op('base1').create(nullTOP)", delayFrames=1)

Зависание интерфейса — синхронная операция в главном потоке: сетевой запрос, чтение большого файла, инференс модели. Выносите в Thread Manager или в отдельный процесс.

Отладка

debug('значение', x)          # печатает с именем оператора и строкой
op('null1').errors()          # ошибки конкретного узла
op('null1').warnings()

Error DAT собирает ошибки по всему проекту в таблицу — положите его в служебную панель, и на площадке будет видно, что именно ругается — Мониторинг.

Запишите рабочую комбинацию версий

Версия TouchDesigner, версия Python, список пакетов, версия драйвера. Через полгода при переустановке это сэкономит день.

рядом по смыслу