代码之家  ›  专栏  ›  技术社区  ›  Benjamin Pollack Stefan Rusek

尝试运行Py2Exe应用程序时出现内存错误

  •  5
  • Benjamin Pollack Stefan Rusek  · 技术社区  · 16 年前

    我试图在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
    

    我有一个强烈的预感,我缺少一个库,但我不确定哪一个,特别是因为依赖关系检查器没有在目标系统上标记任何缺少的内容。我该怎么办?

    4 回复  |  直到 10 年前
        1
  •  7
  •   Community Mohan Dere    9 年前

    同一个问题 https://stackoverflow.com/questions/1979486/py2exe-win32api-pyc-importerror-dll-load-failed .

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

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

    它会帮助你的!

        2
  •  1
  •   Paul    16 年前

    您可以手动执行dll和依赖项检查。当您生成exe时,我确信您已经注意到它会打印出所需/使用的dll。检查系统,其中的exe不工作,如果DLL的存在,如果他们是相同的版本。

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

        3
  •  1
  •   PPTim    16 年前

    您在64位/vista上进行py2exe转换吗?

    我一直在用vista64位编写代码,我创建的.exe文件通常不能在32位xp上工作(这是我手头上的两台机器)。

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

        4
  •  0
  •   IslamTaha    10 年前

    只为将来到这里来的任何人。如果您使用的是任何类型的win32库,并且U一直处于这种类型的错误中,则可以执行以下步骤:

    • 问题是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}})
    

    而且效果很好。