【问题标题】:Problem with loading win32file.pyd on python 2.6在 python 2.6 上加载 win32file.pyd 的问题
【发布时间】:2009-09-17 15:33:40
【问题描述】:

即使是使用 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 而不会出现错误。

【问题讨论】:

    标签: py2exe pywin32 python-2.6


    【解决方案1】:

    解决办法是把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"]}}
         )
    

    【讨论】:

    • mswsock.dll 对我来说不是问题,但 POWRPROF.dll 是。所以我的 dll_excludes 现在是 ["mswsock.dll", "POWRPROF.dll"]。基本上,py2exe 不应该发布 POWRPROF.dll,而是使用系统上可用的 dll 版本。
    • 此修复(删除 mswsock.dll)也适用于 Nuitka 编译器损坏的构建
    猜你喜欢
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多