MemoryLoadError当试图运行py2exe应用程序

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

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 

我有一个强烈的预感,我错过了一个库,但我不确定哪一个 – 尤其是因为依赖检查器不标记目标系统上缺less任何东西。 我应该如何继续?

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

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

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

它会帮助你!

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

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

你在做一个64位/ Vista的py2exe转换吗?

我已经写了我的代码在vista64bit,我创建的.exe文件通常不会在32位XP(这是我手头上的两台机器)工作。

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

只为将来会来的任何人。 如果您正在使用任何类型的win32库,并坚持这种类型的错误,您可以执行以下步骤:

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

例:

根据以下代码:

 import win32crypt win32crypt.CryptUnprotectData(...) 

我使用CryptUnprotectData函数,所以我搜索了CryptUnprotectData所需的DLL,我发现下面的信息输入链接描述在这里 ,你可以看到,
“Crypt32.dll”是必需的。

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

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

它完美的工作。