尝试运行py2exe应用程序时出现MemoryLoadError

时间:2010-01-20 20:15:15

标签: python windows py2exe

我正在尝试在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 个答案:

答案 0 :(得分:7)

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

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

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

它会帮助你!

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

我一直在vista64bit上编写我的代码,我创建的.exe文件通常不能在32位XP上运行(这些是我手边的两台机器)。

.exe帮助抛出带有回溯的文本文件,看起来64位窗口使用win32api.dll。我认为这是64位窗口用于复制32位操作系统行为的.dll,因此我只需使用相同的脚本并在32位XP上进行转换。希望有所帮助。

答案 3 :(得分:0)

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

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

示例:

根据以下代码:

import win32crypt
win32crypt.CryptUnprotectData(...)

我使用了CryptUnprotectData函数,所以我搜索了CryptUnprotectData所需的dll,我找到了以下信息enter link description here,你可以看到,

所以我编辑我的setup.py看起来像那样

includes = ["win32crypt"]
dll_excludes=["Crypt32.dll"]


setup(
    options = {'py2exe': {'bundle_files': 1, 'compressed': True,'dll_excludes': dll_excludes,'includes': includes}})

它完美无缺。