【问题标题】:Trying to import cjson in a Maya 2018 Python environment尝试在 Maya 2018 Python 环境中导入 cjson
【发布时间】:2018-12-10 23:34:45
【问题描述】:

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

在管理员模式下使用“C:\Program Files\Autodesk\Maya2018\Python\Scripts\pip.exe”我设法 pip 安装了 64 位轮文件,这在我的 Maya 2018 站点中给了我 cjson.pyd -包目录。

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

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

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

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

【问题讨论】:

  • 你试过声明一个常量吗?
  • 二进制 python 扩展很可能不适用于 Maya。它们必须使用与您的 Maya 可执行文件相同的设置进行编译——因此,即使您具有正确的位深度,您也可能没有相同的 Visual Studio 编译器环境。如果您在这里挖掘:around-the-corner.typepad.com/.services/blog/… 应该足以让您获得正确的编译器设置。但您可能需要从源代码构建扩展
  • FWIW 您可能只想使用内置的 JSON 实现——除非您正在做一些不寻常的事情,否则 JSON 解析不太可能成为 Maya 应用程序中的瓶颈。如果您处理大量 HTTP 请求,可能会有所不同,但在这里您几乎肯定会受到 IO 限制

标签: python json maya cjson


【解决方案1】:

因此,传统上您会使用 Dependency Walker 之类的东西检查您的 dll 的依赖关系。 .pyd 文件只是重命名为 .dll 文件,所以应该可以正常工作。但是,Dependency Walker 几乎充满了噪音 - 除非您发现一些非常明显的东西(并且您可以立即忽略所有 API-MS-WIN*、EXT-MS-* dll),否则您可能会发现启用 Loader Snaps 更容易(看到这个旧的但仍然是relevant MSDN article),它应该能够告诉你哪个 loadlibrary 调用失败了。或者,您可以使用Process Monitor (procmon) form 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 docs page

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 2019-11-21
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    相关资源
    最近更新 更多