7

我正在尝试使用 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.

我对此进行了谷歌搜索,但没有找到太多,但尝试了以下建议无济于事:

在 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

我对这一切都很陌生,所以任何帮助将不胜感激

谢谢

乔恩

4

4 回答 4

29

当包是在 Vista 上构建但在 XP 上执行时,我已经看到了这个问题。问题原来是 py2exe 错误地添加powrprof.dllmswsock.dll包中。不过,Windows XP 包含这些文件的自己的副本,并且无法加载与您的应用程序一起安装的 Vista 文件。

options从包中删除它们就可以了,您可以通过将其添加到dict 中轻松做到这一点setup.py

 'dll_excludes': [ "mswsock.dll", "powrprof.dll" ]
于 2009-12-30T14:28:00.970 回答
2

@Wim,我发现有关“将其添加到 setup.py 中的选项字典”的内容有点令人困惑。如果像我一样,您在现有的 setup 调用中没有选项 arg,这可能会使事情更清楚:

setup(name='myprog',     
      ...
      options={"py2exe":{"dll_excludes":[ "mswsock.dll", "powrprof.dll" ]}},
      ...
      )
于 2010-10-22T09:13:06.023 回答
0

尝试在选项字典中将 win32api 添加到您的包中。

这是一个例子:

excludes = ["pywin", "pywin.debugger"] # there will be more in real life...
options = dict(optimize=2,
           dist_dir="build",
           excludes=excludes,
           packages=["win32api"]) 
setup(
    name="MyCoolApp",
    options=dict(py2exe=options),
    # etc ...
于 2009-12-30T14:06:25.270 回答
0

就像添加的评论一样。使用 Py2exe 重建程序时,请务必删除旧的“dist”目录。我坐了 3 个多小时不明白为什么我的应用程序在我的开发环境中运行而不是在生产环境中运行。删除 dist 并使用 py2exe 重建,它工作。

于 2012-03-07T10:25:24.297 回答