我有一个导入 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/