我有一个导入 win32clipboard 的 Python 2.7 程序。我尝试在 Windows XP SP3 32 位上使用 cx_Freeze 4.2.3 卡住它,以创建安装 MSI。我根据 cx_Freeze 文档制作了一个 setup.py,并使用了以下命令:

c:\python27\python.exe setup.py bdist_msi

当我在另一台没有安装 Python 2.7 的 PC 上运行它时,我在导入 win32clipboard 的行上得到一个异常:
ImportError: DLL load failed: The specified module could not be found.

我可以看到 win32clipboard.pyd 包含在构建中。

缺少什么依赖项,我如何确保包含它?

最佳答案

我最终认为包含 win32clipboard.pyd ,但是, win32clipboard.pyd 取决于 pywintypes27.dll ,而 cx_Freeze 不是从 c:\windows\system32 复制的。

短期黑客是手动将 c:\windows\system32\pywintypes27.dll 复制到 build\exe.win32-2.7 中,然后再次运行 setup.py bdist_msi

改进的 hack 是在 setup.py 中使用以下内容:

import os
import sys
import win32api
...
pywintypes_dll = 'pywintypes{0}{1}.dll'.format(*sys.version_info[0:2])      # e.g. pywintypes27.dll
build_exe_options = {..., "include_files": [ (os.path.join(win32api.GetSystemDirectory(), pywintypes_dll), pywintypes_dll)]}
...
setup(  ...,
        options = { 'build_exe': build_exe_options,
                    ...,
                  },
        ...)

(最好改进 cx_Freeze 以自动检测 pywintype27.dll 依赖项,但我想这始终是一项正在进行的工作。)

关于python - 导入错误 : DLL load failed when importing win32clipboard in application frozen with cx_Freeze,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11130605/

10-14 18:39