Внешние модули и окружения
Пакеты pip подключают путём в настройках или через tdPyEnvManager, который возит окружение вместе с проектом. numpy и OpenCV свои не подменяют, тяжёлое изолируют.
У TouchDesigner свой Python и свой набор пакетов, в том числе numpy и OpenCV. Остальное подключают снаружи, и именно здесь спотыкается большинство попыток запустить нейросеть.
Путь к пакетам
Работает во всех ветках. Ставится отдельный Python той же версии, что внутри, — для 2025.30000 это последняя подверсия 3.11 с python.org, — или окружение через Anaconda. Пакет кладут туда:
pip install --target=D:/td_packages onnxruntime-gpu
Дальше в Edit → Preferences → General включают
Add External Python to Search Path, путь вписывают в
Python 64-bit Module Path (несколько — через ;) и перезапускают
программу. Другие пути — переменная окружения PYTHONPATH или код
в onStart() у Execute DAT:
import sys
mypath = 'D:/td_packages'
if mypath not in sys.path:
sys.path = [mypath] + sys.path
Путь в начале списка перекрывает одноимённые пакеты самого TouchDesigner — держите это в голове, если там окажется свой numpy.
tdPyEnvManager
В палитре ветки 2025.30000 есть менеджер окружений прямо в программе.
Он создаёт и подключает venv и conda, открывает командную строку
активного окружения для pip и conda, выгружает окружение в
requirements.txt или environment.yml и собирает новое из них.
Контекст хранится рядом с проектом в TDPyEnvManagerContext.yaml,
а со сборки 2025.32280 ещё и в разделе
[tool.touchdesigner.TDPyEnvManagerContext] файла pyproject.toml.
С автонастройкой окружение подключается при запуске, до инициализации
компонентов; шаг блокирующий, и старт удлиняется. Зато окружение переносится
вместе с проектом.
Тяжёлую работу в фоне выполняет Thread Manager из ресурсов программы,
op.TDResources.ThreadManager: пул потоков с очередью задач, при котором
модель грузится и считается, а картинка не замирает —
Отложенный запуск и потоки.
Внутренние инструменты и палитра опираются на встроенные numpy и OpenCV, и Derivative прямо пишет: другие версии — на ваш страх и риск. Падение может прийти не сразу. Библиотеку, которой нужен другой numpy, уносят в отдельный процесс.
Изоляция
| Способ | Плюс | Минус |
|---|---|---|
| В том же процессе | Просто, быстро | Падение библиотеки роняет шоу |
| В потоке (Thread Manager) | Не блокирует кадр | Всё ещё один процесс |
| В Engine COMP | Изоляция от падений | Сложнее отладка |
| Отдельное приложение + Spout/NDI | Полная изоляция | Задержка, больше движущихся частей |
Чем тяжелее и чужероднее библиотека, тем дальше её держат, и для шоу обычно выбирают две последние строки.
import sys
for p in sys.path: print(p)
import onnxruntime as ort
print(ort.__version__, ort.get_available_providers())
Импорт упал — проверьте версию Python, потом разрядность, потом путь. Частые ошибки разобраны в Ошибках Python.
Нашли в статье ошибку, устаревшее или непонятное место?