Py2exe - win32api.pyc ImportError DLL加载失败

7 python py2exe

我正在尝试使用py2exe来分发我编写的python应用程序.一切似乎都没问题,但是当我在另一台机器上运行时它失败并出现以下错误:

Traceback (most recent call last):
  File "application.py", line 12, in <module>
  File "win32api.pyc", line 12, in <module>
  File "win32api.pyc", line 10, in __load
ImportError: DLL load failed: The specified procedure could not be found.
Run Code Online (Sandbox Code Playgroud)

我搜索了这个并没有找到很多,但尝试了以下建议无济于事:

在win32api之前导入pywintypes和pythoncom(在py2exe的setup.py和主应用程序中)在setup.py中添加了一些代码 -

# ModuleFinder can't handle runtime changes to __path__, but win32com uses them
import pywintypes
import pythoncom
import win32api
try:
# if this doesn't work, try import modulefinder
    import py2exe.mf as modulefinder
    import win32com
    for p in win32com.__path__[1:]:
        modulefinder.AddPackagePath("win32com", p)
    for extra in ["win32com.shell"]: #,"win32com.mapi"
        __import__(extra)
        m = sys.modules[extra]
        for p in m.__path__[1:]:
            modulefinder.AddPackagePath(extra, p)
except ImportError:
    # no build path setup, no worries.
    pass
Run Code Online (Sandbox Code Playgroud)

我对这一切都很陌生,所以任何帮助都会非常感激

谢谢

乔恩

Wim*_*Wim 29

当程序包在Vista上构建但在XP上执行时,我已经看到了这个问题.原来,这个问题是该py2exe误加powrprof.dll,并mswsock.dll在包装上.Windows XP虽然包含这些文件的副本,但无法加载随应用程序安装的Vista.

从包中删除它们就可以了,你可以通过将它添加到optionsdict中来轻松完成setup.py

 'dll_excludes': [ "mswsock.dll", "powrprof.dll" ]
Run Code Online (Sandbox Code Playgroud)

  • 请注意,默认情况下,py2exe不会清除分发目录的内容,因此如果您以前尝试安装软件,那么即使在重新安装完成后,"mswsock.dll"和"powrprof.dll"文件仍会存在安装(一旦你在上面添加'dll_excludes'行).在重新运行py2exe之前,请务必删除分发目录. (3认同)