5

我正在尝试在 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

4 回答 4

7

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

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

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

它会帮助你!

于 2010-11-02T04:41:27.150 回答
1

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

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

于 2010-02-26T07:00:54.443 回答
1

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

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

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

于 2010-02-26T20:22:49.290 回答
0

只为那些将来会来这里的人。如果您使用任何类型的 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}})

它工作得很好。

于 2016-07-02T03:12:26.983 回答