简体   繁体   中英

wxPython py2exe app not bundling properly?

I've got a wxPython application that I'm trying to make into an exe using py2exe, but I'm having some trouble. I've got MSVCP90.dll in the same directory as the script, and after py2exe finished, it says "The program can't start because MSVCR90.dll is missing..." when launching the exe. Why isn't it finding it?

While it's py2exe'ing, I also get the following:

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

Is there something I'm missing here? How hard can it be to take a .py wxPython app and turn it into a .exe wxPython app?

I had similar issues with py2exe. My project uses additional libraries like wxPython and Requests.

This worked for me:

  1. Create project using gui2exe

  2. Specify very basic settings like Target Classes and Data Files (in my case - images, sqlite database etc.) and compile project.

  3. In dist directory You will find compiled project that should work on our machine.

  4. Next steps are mixture of this two tutorials: py2exe and cx_freeze

  5. In dist create directory Microsoft.VC90.CRT

  6. Copy to this directory files msvcm90.dll , msvcp90.dll , msvcr90.dll from C:\\WINDOWS\\WinSxS\\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_d08d0375

  7. Copy also C:\\WINDOWS\\WinSxS\\Manifests\\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_d08d0375.manifest , but rename to Microsoft.VC90.CRT.manifest

    I have done this using Win XP 32-bit and Python 2.7.3 and succesfully launched compiled application on another xp machine and windows 7.

do you have any desire to try pyinstaller . I too had tried py2exe for wxPython project and received many obscure bugs. Pyinstaller came to light on the first try, and I thought it was even easier.

After nearly a year of trying to build one with no success. Finally got it. You must exclude both files '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']

The way to handle this is to exclude MSVCP90.dll from the py2exe package. Here's a part of one of my setup scripts that does this:

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]
    )

You will then be responsible for assuring that the MS Visual C++ runtime is installed on end user's machine. You can get it here:

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

My experience is that is rare to find a Windows machine that lacks the visual c runtime, but you'll need to be ready to handle this just in case.

good luck, Mike

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM