2012-10-18 33 views
0

我有一个wxPython应用程序,我试图使用py2exe制作成exe文件,但我遇到了一些麻烦。我在脚本的同一目录下有MSVCP90.dll,并且在py2exe完成后,它显示“该程序无法启动,因为MSVCR90.dll丢失...”启动exe时。为什么它没有发现它?wxPython py2exe应用程序未正确捆绑?

虽然它py2exe'ing,我也得到了以下几点:

The following modules appear to be missing 
['Carbon', 'Carbon.Files'] 
... 
Your executable(s) also depend on these dlls which are not included, 
you may or may not need to distribute them. 
... 
    OLEAUT32.dll - C:\PATH 
    USER32.dll - C:\PATH 
... 
    MSVCP90.dll - C:\PathToTheDllInMyScriptsFolder 

是否有我丢失的东西吗?把一个.py wxPython应用程序变成一个.exe wxPython应用程序有多困难?

回答

1

处理此问题的方法是从py2exe软件包中排除MSVCP90.dll。下面是这是否我的设置脚本之一的一部分:

dll_excludes = ['libgdk-win32-2.0-0.dll', 'libgobject-2.0-0.dll', 'tcl84.dll', 
       'tk84.dll','MSVCP90.dll'] 

setup(
    data_files = data_files, 
    options = {"py2exe": {"compressed": 2, 
          "optimize": 2, 
          "includes": includes, 
          "excludes": excludes, 
          "packages": packages, 
          "dll_excludes": dll_excludes, 
          "bundle_files": 1, 
          "dist_dir": "dist", 
          "xref": False, 
          "skip_archive": False, 
          "ascii": False, 
          "custom_boot_script": '', 
         } 
       }, 
    zipfile = None, 
    windows = [filename] 
    ) 

然后,您将负责确保在微软的Visual C++运行时将安装最终用户的机器上。你可以在这里得到它:

http://www.microsoft.com/en-us/download/details.aspx?id=29

我的经验是很难找到一个Windows机器缺少Visual C运行时,但你需要做好准备来处理这种以防万一。

好运, 迈克

2

你有没有想尝试pyinstaller。 我也曾尝试过用于wxPython项目的py2exe,并收到许多晦涩的错误。 Pyinstaller在第一次尝试中露面,我认为它更容易。

+0

我也试过,但它似乎没有更好的工作。我会再试一次。 – tkbx

+0

这里是我的bat文件的内容,以创建EXE '回声蟒蛇Configure.py 回声蟒蛇Makespec.py --onefile d:\ project.py C:\ Python27 \ python.exe Build.py项目\ project.spec' – SWAPYAutomation

+0

你可以使用命令提示符命令吗? Build.py是一个py2exe脚本文件吗? – tkbx

3

我与py2exe类似的问题。我的项目使用额外的库,如wxPython和Requests。

这为我工作:

  1. 使用gui2exe

  2. 指定目标一样类和数据文件(在我的情况 - 图像,SQLite数据库等)非常基本的设置创建项目和编制项目。

  3. dist目录您会发现应该在我们的机器上工作的编译项目。

  4. 下一个步骤是这两个教程的混合物和py2execx_freeze

  5. dist创建目录Microsoft.VC90.CRT

  6. C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_d08d0375

  7. 复制复制到该目录下的文件msvcm90.dllmsvcp90.dllmsvcr90.dllC:\WINDOWS\WinSxS\Manifests\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_d08d0375.manifest,但改名为Microsoft.VC90.CRT.manifest

    我已经完成了这个使用Win XP 32位和Python 2.7.3,并成功地在另一个XP机器和Windows 7上启动编译的应用程序。

+0

*叹*。为什么不能像py2app?你输入'py2app myscript.py myicon.icns',并且你有一个工作程序。 – tkbx

2

经过近一年的努力,没有成功建设一个。终于明白了。您必须排除文件'msvcp90.dll','msvcr71.dll'。

dll_excludes = ['libgdk-win32-2.0-0.dll','libgobject-2.0-0.dll','tcl84.dll', 'tk84.dll','msvcp90.dll','msvcr71 .dll']

+0

非常感谢Miguel! –