Попытка импортировать cjson в среде Python Maya 2018

1

Я бы хотел использовать cjson в Maya 2018, но у меня проблемы. Первоначальный инструмент, похоже, 32-битный скомпилированный (https://pypi.org/project/python-cjson/), поэтому я огляделся и нашел версию, которая была скомпилирована в 64-разрядной версии из https://www.lfd. uci.edu/~gohlke/pythonlibs/.

С помощью "C:\Program Files\Autodesk\Maya2018\Python\Scripts\pip.exe" в режиме администрирования мне удалось установить 64-битный файл колес, и это дало мне cjson.pyd в моем каталоге сайтов сайтов Maya 2018.

Однако, когда я пытаюсь импортировать это, я получаю ошибку:

// Error: root : [('<maya console>', 2, '<module>', None)] //
// Error: root : DLL load failed: The specified module could not be found. //
// Error:  //

Имел ли кто-нибудь опыт импорта этого модуля в Maya раньше?

У меня такое чувство, что это может быть связано с DLL-зависимостями, но я не уверен, с чего начать его решать.

  • 0
    Вы пытались объявить const?
  • 0
    Существует высокая вероятность того, что двоичные расширения Python не работают с Maya. Они должны быть скомпилированы с теми же настройками, что и исполняемый файл Maya, поэтому даже если у вас правильная битовая глубина, у вас может не быть той же среды компилятора Visual Studio. Если вы покопаетесь здесь: around-the-corner.typepad.com/.services/blog/…, этого должно быть достаточно, чтобы правильно настроить компилятор. Но вам, вероятно, нужно собрать расширение из исходного кода.
Показать ещё 1 комментарий
Теги:
maya
cjson

1 ответ

2

Таким образом, вы обычно проверяете свою dll на зависимости, используя что-то вроде Dependency Walker. .pyd файлы просто переименованы.dll файлы, поэтому с этим следует работать нормально. Однако Dependency Walker в основном полон шума - если вы не заметите что-то действительно очевидное (и вы можете сразу же игнорировать все DLL API-MS-WIN *, EXT-MS- *), вам может быть проще включить Loader Snaps ( см. эту старую, но все же актуальную статью MSDN), которая, мы надеемся, сможет рассказать вам, какой вызов loadlibrary терпит неудачу. Кроме того, вы можете использовать форму Process Monitor (procmon) Sysinternals для просмотра файлов, которые Maya пытается загрузить при импорте модуля в сценарий. Я не могу вспомнить, запускает ли Maya отдельный процесс для запуска сценариев python, или если они выполняются в контексте основного процесса майи. Это важно, так как вы хотите фильтровать события в procmon только для исполняемого файла maya/python, так как иначе вы будете завалены ими.

Редактирование: просмотрев исходный код, похоже, не так много зависимостей за пределами самих заголовков python и в какой-то стандартной библиотеке. Я подозреваю, что более вероятно, что это скомпилировано с другой версией инструментальной цепочки, чем Maya Python. В интерпретаторе Python вы должны увидеть такую строку, когда вы ее начинаете:

Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit (AMD64)] on win32

Было бы неплохо увидеть, какая комбинация была использована для ее компиляции (бит квадратных скобок), а затем снова построить расширение из источника с помощью этой инструментальной цепочки. Кроме того, вы можете попробовать запустить setup.py для этого модуля на странице проекта GitHub, которая, если ваша машина настроена на возможность компиляции расширений python правильно, построит ее из источника. Более подробную информацию о создании c-расширений можно найти на странице документов Python.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню