首页 > 解决方案 > 尝试在 Maya 2018 Python 环境中导入 cjson

问题描述

我想在 Maya 2018 中使用cjson,但遇到了一些麻烦。原始工具似乎是 32 位编译的(https://pypi.org/project/python-cjson/ ),所以我环顾四周,发现了一个从https://www.lfd以 64 位编译的版本。 uci.edu/~gohlke/pythonlibs/

在管理员模式下使用“C:\

但是,当我尝试导入它时,我得到了错误:

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

以前有没有人有过将此模块导入 Maya 的经验?

我有一种感觉,这可能是为了做 DLL 依赖,但我不知道从哪里开始解决它。

标签: pythonjsonmayacjson

解决方案


因此,传统上您会使用Dependency Walker之类的工具检查您的 dll 是否存在依赖关系。.pyd 文件只是重命名为 .dll 文件,所以应该可以正常工作。然而,Dependency Walker 基本上充满了噪音 - 除非您发现一些非常明显的东西(并且您可以立即忽略所有 API-MS-WIN*、EXT-MS-* dll),那么您可能会发现启用 Loader Snaps 更容易(请参阅这篇旧但仍然相关的 MSDN 文章),它应该能够告诉您哪个 loadlibrary 调用失败。或者,您可以使用进程监视器(procmon) 形成 Sysinternals 以查看当您将模块导入脚本时 Maya 尝试加载哪些文件。我不记得 Maya 是否生成了一个单独的进程来运行它的 python 脚本,或者它们是否在主 Maya 进程的上下文中执行。这很重要,因为您需要将 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

最好看看使用什么工具链来编译它(方括号位),然后使用该工具链再次从源代码构建扩展。或者,您可以尝试从项目的GitHub页面运行此模块的 setup.py ,如果您的机器设置为能够正确编译 python 扩展,将从源代码构建它。有关构建 c 扩展的更多详细信息可以在Python 文档页面上找到。


推荐阅读