【问题标题】:wxPython py2exe app not bundling properly?wxPython py2exe 应用程序未正确捆绑?
【发布时间】:2012-10-18 23:24:38
【问题描述】:

我有一个 wxPython 应用程序,我正在尝试使用 py2exe 将它制作成一个 exe,但我遇到了一些麻烦。我在与脚本相同的目录中有MSVCP90.dll,在 py2exe 完成后,它在启动 exe 时显示“程序无法启动,因为缺少 MSVCR90.dll...”。为什么找不到呢?

虽然它是 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 应用程序有多难?

【问题讨论】:

    标签: python dll wxpython py2exe


    【解决方案1】:

    我在使用 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复制文件msvcm90.dll,msvcp90.dll,msvcr90.dll到这个目录

    7. 也复制C:\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 上成功启动了编译后的应用程序。

    【讨论】:

    • 叹息。为什么这不能像 py2app?你输入py2app myscript.py myicon.icns,你就有了一个工作程序。
    【解决方案2】:

    你有没有想试试pyinstaller。 我也曾为 wxPython 项目尝试过 py2exe,但收到了许多晦涩难懂的错误。 Pyinstaller 在第一次尝试时就出现了,我认为它更容易。

    【讨论】:

    • 我也试过了,但它似乎没有更好的效果。我一会儿再试试。
    • 这是我创建 exe 的 bat 文件的内容echo python Configure.py echo python Makespec.py --onefile D:\project.py c:\Python27\python.exe Build.py project\project.spec
    • 你能用命令提示符命令吗? Build.py 是 py2exe 脚本文件吗?
    • 你的意思是:'compiled' .exe 是否像源 .py 文件一样与命令提示符一起工作? - 是的。 build.py 是 pyinstaller scipt
    • 不,我的意思是不要制作批处理文件,你可以 C:\Python27\python.exe Build.py 并让 Build.py 成为 py2exe 文件
    【解决方案3】:

    经过近一年的尝试构建一个没有成功。终于明白了。您必须排除两个文件“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']

    【讨论】:

      【解决方案4】:

      处理这个问题的方法是从 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]
          )
      

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

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

      我的经验是,很难找到缺少 Visual c 运行时的 Windows 机器,但您需要做好准备以防万一。

      祝你好运, 迈克

      【讨论】:

        猜你喜欢
        • 2011-02-13
        • 2010-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-04
        • 2021-05-08
        • 2016-11-17
        相关资源
        最近更新 更多