Python, загрузить модуль отладки из релизной сборки Python / Blender - PullRequest
1 голос
/ 09 апреля 2011

Я пишу скрипт экспорта для Blender, который использует python для любых дополнений. Поскольку большая часть моей кодовой базы находится на C ++, я решил обернуть мой код в модуль Python (pyd), который будет импортирован из сценария экспорта и передаст все соответствующие биты для преобразования.

Пока я делаю сборку релизов, blender прекрасно загружает модуль, и я даже могу отлаживать с Visual Studio - но для устранения ошибки сборки релизов ненадежны, поэтому мне нужно использовать отладочную сборку модуля. К сожалению, в этом случае модуль не загружается.

Из консоли Python:

 >>> import exporter_d
 Traceback (most recent call last):
  File "<blender_console>", line 1, in <module>
 ImportError: DLL load failed: The specified module could not be found.

Посмотрев немного, я обнаружил, что ошибка в том, что не удалось найти другую dll, и, поскольку я ничего не загружаю, я добавил отладочную сборку python вместе со своим модулем. Теперь ошибка другая:

Traceback (most recent call last):
  File "<blender_console>", line 1, in <module>
ImportError: dynamic module does not define init function (PyInit_exporter_d)

Таким образом, я изменил имя инициализации модуля с «PyInit_exporter» на «PyInit_exporter_d» (и удалил отладочный pythond.dll, так как он сбивал блендер с фатальной ошибкой), которая возвращает первую ошибку (сбой загрузки dll).

Итак, мой вопрос таков: как я могу загрузить отладочные сборки модуля python при запуске релизной версии python? Поскольку python встроен в blender, я бы не хотел загружать исходный код и перестраивать его.

1 Ответ

1 голос
/ 19 ноября 2012

Вот как настроить среду, чтобы вы могли использовать как отладочную, так и выпускную сборки:

В вашем коде c ++ вам нужно иметь

PyMODINIT_FUNC initmyExporter(void)

В вашем решении Visual Studio (или в том, что вы используете для указания имени результата компиляции вашего кода) произнесите

<path_to_some_folder>\myExporter_d.pyd for Debug mode

и

<path_to_some_folder>\myExporter.pyd for Release mode

При импорте используйте

import myExporter

как с python.exe, так и с python_d.exe

...