我试图在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任何东西。 我应该如何继续?
看看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库,并坚持这种类型的错误,您可以执行以下步骤:
例:
根据以下代码:
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}})
它完美的工作。