【问题标题】:MemoryLoadError when trying to run py2exe application尝试运行 py2exe 应用程序时出现 MemoryLoadError
【发布时间】:2010-01-20 20:15:14
【问题描述】:

我正在尝试在 Windows 上使用 py2exe 0.6.9 和 Python 2.6.4 捆绑 Python 应用程序。虽然可执行文件在我用来构建它的系统上运行得很好,但当我尝试在另一个系统上运行它时它会失败:

C:\Documents and Settings\Administrator\Desktop\dist>.\backend.exe install
Traceback (most recent call last):
  File "boot_service.py", line 6, in <module>
  File "zipextimporter.pyo", line 82, in load_module
  File "win32serviceutil.pyo", line 9, in <module>
  File "zipextimporter.pyo", line 98, in load_module
ImportError: MemoryLoadLibrary failed loading win32api.pyd

我有一种强烈的预感,我缺少一个库,但我不确定是哪个——尤其是因为依赖项检查器没有在目标系统上将任何内容标记为缺少。我应该如何进行?

【问题讨论】:

    标签: python windows py2exe


    【解决方案1】:

    与https://stackoverflow.com/questions/1979486/py2exe-win32api-pyc-importerror-dll-load-failed 相同的问题。

    查看 setup.py,只排除系统中包含的这些 dll。

     'dll_excludes': [ "mswsock.dll", "powrprof.dll" ]
    

    它会帮助你!

    【讨论】:

      【解决方案2】:

      您可以手动进行 dll 和依赖项检查。当您生成 exe 时,我相信您已经注意到它会打印出所需/使用的 dll。检查系统,exe不工作的地方,dll是否存在以及它们是否是相同的版本。

      另一件事。您是将整个 dist 文件夹复制到系统还是只复制 exe,因为您需要整个 dist 文件夹而不仅仅是 exe。

      【讨论】:

      • 我正在检查 DLL,它们在那里——至少在名称上是这样。依赖性检查器正在确认这一点。我正在复制整个 dist 文件夹,而不仅仅是 exe。
      • 那些 dll 的版本是什么?你检查了吗?
      【解决方案3】:

      你是在 64bit/vista 上做 py2exe 转换吗?

      我一直在 vista64 位上编写代码,而我创建的 .exe 文件通常无法在 32 位 XP 上运行(这是我手头的两台机器)。

      .exe 有用地抛出一个带有回溯的文本文件,看起来 64 位 Windows 使用了 win32api.dll。我假设这是 64 位 Windows 用来复制 32 位操作系统行为的 .dll,所以我只需采用相同的脚本并在 32 位 XP 上进行转换。希望对您有所帮助。

      【讨论】:

        【解决方案4】:

        仅适用于将来会来这里的任何人。如果您使用任何类型的 win32 库并且遇到此类错误,您可以执行以下步骤:

        • 问题问题是win32函数dll文件和py2exe自动dll文件之间存在冲突。所以要解决这个冲突,你必须知道你的函数需要的 dll 文件,然后从设置选项中排除这些文件

        例子:

        根据以下代码:

        import win32crypt
        win32crypt.CryptUnprotectData(...)
        

        我使用了 CryptUnprotectData 函数,所以我搜索了 CryptUnprotectData 所需的 dll 并找到了以下信息 enter link description here,如您所见,
        “Crypt32.dll”是必需的。

        所以我将 setup.py 编辑成这样

        includes = ["win32crypt"]
        dll_excludes=["Crypt32.dll"]
        
        
        setup(
            options = {'py2exe': {'bundle_files': 1, 'compressed': True,'dll_excludes': dll_excludes,'includes': includes}})
        

        而且效果很好。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-06-13
          • 1970-01-01
          • 1970-01-01
          • 2018-06-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多