在一个机器上打包的程序,放到另一个机器上运行就会报错:“由于应用程序配置不正确,程序未能启动.重新安装应用程序可能会纠正这个错误”。

参考这个文章:http://www.py2exe.org/index.cgi/Tutorial#Step52,鼓捣了半天发现不行,还以为是windows server 2003的问题,又上网搜了半天,dependencewalk都用上了;最后又仔细阅读了一下,原来需要把Microsoft.VC90.CRT.manifest也一起放到CRT目录下,郁闷。

最后如果是wxPython程序,报下面错误:

Traceback (most recent call last):
  File "test_wx.py", line 1, in <module>
  File "wxPython\__init__.pyc", line 15, in <module>
  File "wxPython\_wx.pyc", line 3, in <module>
  File "wxPython\_core.pyc", line 15, in <module>
  File "wx\__init__.pyc", line 45, in <module>
  File "wx\_core.pyc", line 4, in <module>
  File "wx\_core_.pyc", line 12, in <module>
  File "wx\_core_.pyc", line 10, in __load
ImportError: DLL load failed: 找不到指定的模块。

可以把msvcp90.dll放到exe同级目录。我的setup.py脚本如下。

from distutils.core import setup
import py2exe
from glob import glob

data_files = [("Microsoft.VC90.CRT", glob(r'..\msvcrt\*.*')), \
                ('', glob(r'..\msvcrt\MSVCP90.dll')), \
                ('', glob(r'load.exe')) ]
setup(
    #options = {
    #    "py2exe": {
    #        "dll_excludes": ["MSVCP90.dll"]
    #    }
    #},
    windows=["ui.py"],
    data_files=data_files,
)

Simon Lee

My blog