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

Я хотел бы использовать 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" в режиме администратора, мне удалось установить pip-файл 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, но я не уверен, с чего начать.

1 ответ

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

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

Другие вопросы по тегам