7

即使是使用 win32file 的简单脚本,我也无法正确打包 py2exe 我不断收到以下错误消息:

Traceback (most recent call last):
  File "dependency_checker.py", line 1, in <module>
  File "win32file.pyc", line 12, in <module>
  File "win32file.pyc", line 10, in __load
ImportError: DLL load failed: The specified procedure could not be found.

该脚本如下所示:

import win32file
print "Hello world!"

这是 setup.py:

from distutils.core import setup
import py2exe
setup(console=['dependency_checker.py'])

你以前有过类似的问题吗?

版本:

Python 2.6.2、py2exe 0.6.9、pywin32-214、Windows 7 和 Windows XP Pro 作为目标机器

更新:

  • 我可以在创建它的 Windows 7 上运行捆绑的程序,但不能在 XP 机器上运行它。
  • 引发错误的 win32file.pyc 部分如下所示:

    >>> imp.load_dynamic('win32file', r'C:\test\setup-test\src\dist\win32file.pyd')
    

我的开发箱(windows 7)上面的行正确运行,而在测试箱(windows XP)上返回错误。

** 更新 2:**

当我使用 imp.load_dynamic 从 python 安装加载 win32file 时,我可以重新加载 dist 文件夹的 win32file.pyd 而不会出现错误。

4

1 回答 1

9

解决方法是删除 py2exe 错误地复制到 dist 目录的 MSWSOCK.dll。

我使用 procmon 和 listdll 来检查导入成功时 win32file.pyd 加载了什么以及导入失败时加载了什么 dll。然后有我检查过的dll列表是否正确加载,即。dist 文件夹中的 python dll 和 windows 文件夹中的 windows dll。

这是运行良好的 setup.py

from distutils.core import setup
import py2exe
setup(console=['dependency_checker.py'],
     options={'py2exe': {"dll_excludes": ["mswsock.dll", "MSWSOCK.dll"]}}
     )
于 2009-09-18T14:52:58.870 回答