2009-09-17 74 views
7

我不能让py2exe收拾即使正确使用win32file 我经常收到以下错误消息的简单脚本:问题与装载win32file.pyd Python的2.6

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']) 

HAV你有过类似的问题吗?

版本:

的Python 2.6.2,py2exe 0.6.9,pywin32-214,Windows 7和Windows XP专业版作为目标机器

UPDATE:

  • 我可以运行在我的Windows 7上创建的捆绑程序,但我无法在XP机器上运行它。
  • win32file.pyc的抛出错误看起来如下部分:

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

上面我的dev的框(Windows 7)线路正常运行,而在测试框(Windows XP)的回报错误。

**更新2:**

当我使用imp.load_dynamic加载win32file形式蟒安装然后我可以重新加载为dist文件夹的win32file.pyd而不会出现错误。

回答

9

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

我已经使用procmon和listdll来检查什么是加载的win32file.pyd当导入是成功和什么DLL导入失败时加载。然后有我已经检查,如果他们正确加载DLL的列表即。来自dist文件夹的python dll和windows文件夹中的windows dll。

这里是工作正常

from distutils.core import setup 
import py2exe 
setup(console=['dependency_checker.py'], 
    options={'py2exe': {"dll_excludes": ["mswsock.dll", "MSWSOCK.dll"]}} 
    ) 
+0

mswsock.dll是不是一个问题,我的setup.py,但POWRPROF.dll了。所以我的dll_excludes现在是[“mswsock.dll”,“POWRPROF.dll”]。基本上,py2exe不应该运送POWRPROF.dll,而是使用系统上可用的dll版本。 – Jim 2014-01-24 15:55:17

+0

真的有效!谢谢 – 2014-03-08 10:19:02