Отладка многофайлового аддона в Blender быстрой переустановкой

Для отладочного запуска разрабатываемого многофайлового аддона в Blender удобно использовать следующую систему. Однако описанный поход обладает одним недостатком: импортируемые в файле __init__.py модули становятся доступны только после выполнения самого файла (после того, как отработает функция register() ). Это означает, что любые обращения к импортируемым модулям до их регистрации вызовут ошибку. В большинстве случаев это не критично, однако вызовет проблемы, если в аддоне например используется наследование от класса, описанного в импортируемом модуле т.к. описание классов в модуле обрабатывается раньше инициализации аддона.

Чтобы получить больше свободы при работе с импортируемыми модулями, для отладки аддона можно использовать другой принцип – не запускать аддон непосредственно из директории разработки, а инсталлировать его в Blender и проверять работу сразу “на чистовую”. Однако ручная переустановка аддона требует выполнения определенного набора действий, что излишне затрудняет подобную отладку. Решить данную проблему можно проводя переустановку аддона для тестов в автоматическом режиме.

Рассмотрим отладочный запуск на примере рассматриваемого ранее тестового аддона “addCube”, состоящего из трех модулей:

  • __init__.py
  • addCube.py
  • addCubePanel.py

Модули “addCube” (добавление в сцену дефолтного куба) и “addCubePanel” (панель с кнопкой добавления куба в сцену) останутся без изменений:

Зато модуль инициализации аддона __init__.py заметно упрощается.

Так как пакет с модулями аддона теперь всегда будет располагаться в одном месте – в директории аддонов Blender, импортировать нужные для работы модули можно одной командой:

То есть отпадает необходимость предварительного импортирования всех модулей пакета.

Для работы аддона необходимо импортировать только главные модули “addCube” и “addCubePanel”.

Если (в более сложных аддонах) где-то во внутренних модулях требуется сделать нужный импорт, никакого предварительного импорта в файле __init__.py делать не требуется. Для импорта во внутреннем модуле достаточно все той же команды “from . import имя_модуля”.

В файле __init__.py помимо импорта главных модулей  остаются только функции “register” и “unregister” для их инициализации и блок с описанием аддона.

Полный код файла __init__.py для тестового аддона имеет следующий вид:

Модули аддона готовы, осталось модифицировать отладочный скрипт в Blender.

Откроем Blender, перейдем в окно Text Editor и создадим новый скрипт.

Для начала определим входные параметры: название директории (пакета) аддона, полный путь к директории разработки аддона и сами модули, которые нужны для работы аддона – все файлы с расширением “.py”. Если в аддон нужно включить какие-то дополнительные файлы, например “README.md” и “LICENSE”, укажем их отдельным списком:

Соберем все необходимые файлы с полными путями в список “files”:

В системной директории для временных файлов создадим свою временную папку. В ней мы подготовим файлы аддона к инсталляции в Blender. Использование конструкции “with” позволит автоматически подчистить все временные файлы и директории по окончании выполнения скрипта.

Во временную директорию скопируем все собранные ранее файлы. Копировать нужно в пакет, т.е. в поддиректорию с именем таким же, как имя аддона.

Упакуем готовый пакет с файлами в zip-архив:

В переменную “addon_zip_path” сохраняется полный путь к готовому zip-архиву, из которого будет проводиться дальнейшая установка аддона.

При разработке аддона, его код будет постоянно обновляться. Поэтому каждый запуск отладочного скрипта сначала должен удалить старую (установленную при предыдущем запуске) версию аддона.

Сначала аддон деактивируется, после чего удаляется из Blender. Однако импортированные в процессе работы аддона модули при этом из памяти не удаляются. Чтобы обновился весь код, их так же нужно удалить. Удаляем только те модули, которые загружены из пакета нашего аддона.

Теперь можно заново установить аддон из временной директории:

Полный код скрипта, переустанавливающего аддон для отладочных запусков следующий:

Теперь для того, чтобы полностью обновить код аддона в Blender достаточно всего лишь нажать кнопку “Run Script”.

Этот отладочный скрипт является универсальным, его можно использовать при разработке любого мультифайлового аддона, нужно только изменить директорию аддона и путь к директории разработки на новые.

0 0 голоса
Article Rating
Подписаться
Уведомить о
guest

6 Комментарий
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Андрей
11 месяцев назад

Я правильно понимаю, что если аддон допустим будет содержать большие портативные либы, то каждый такой релоад будет гонять сотни мегабайт (а может и гигабайт) по винту?
И это может быть в теории еще и не очень быстрым?

Если да, то можно сделать какой-то игнор лист или что-то подобное?

Kulagin
2 лет назад

Не работало на версии 2.92.

Обновленная для 2.92 версия:

Nikolay sungreen (sungreen)
Nikolay sungreen (sungreen)
6 лет назад

… ты так скоро своё IDE для разработки дополнений напишешь …

Nikita
6 лет назад
Ответить на  Nikolay sungreen (sungreen)

Пока удается использовать чужие. Хотя мысль писать свою ide интересная )