alexroat
alexroat

Reputation: 1727

Create a standalone windows exe which does not require pythonXX.dll

is there a way to create a standalone .exe from a python script. Executables generated with py2exe can run only with pythonXX.dll. I'd like to obtain a fully standalone .exe which does not require to install the python runtime library. It looks like a linking problem but using static library instead the dynamic one and it would be also useful to apply a strip in order to remove the unused symbols.

Any idea ?

Thanks.

Alessandro

Upvotes: 16

Views: 9896

Answers (5)

Jason Coon
Jason Coon

Reputation: 18421

You can do this in the latest version of py2exe...
Just add something like the code below in your setup.py file (key part is 'bundle_files': 1).

To include your TkInter package in the install, use the 'includes' key.

distutils.core.setup(
      windows=[
            {'script': 'yourmodule.py',
             'icon_resources': [(1, 'moduleicon.ico')]
            }
      ],
      zipfile=None,
      options={'py2exe':{
                         'includes': ['tkinter'],
                         'bundle_files': 1
                        }
      }
  )

Upvotes: 17

Ryan Ginstrom
Ryan Ginstrom

Reputation: 14121

If your purpose of having a single executable is to ease downloading/emailing, etc., I've solved this by bundling the py2exe output using Inno Setup. This is actually better than having a single executable, because rather than providing an executable file that can be dropped into some directory, a well behaved Windows application will provide an uninstaller, show up in the Add/Remove Programs applet, etc. Inno handles all this for you.

Upvotes: 4

Mark Ramm
Mark Ramm

Reputation: 111

Another solution is to create a single exe with python and all your dependencies installed inside of it, including the python.dll. There's a bit of magic in the wrapper, but it just works. The details are here:

http://code.google.com/p/pylunch/downloads/detail?name=PyLunch-0.2.pdf

Upvotes: 2

Ignacio Vazquez-Abrams
Ignacio Vazquez-Abrams

Reputation: 798606

Due to how Windows' dynamic linker works you cannot use the static library if you use .pyd or .dll Python modules; DLLs loaded in Windows do not automatically share their symbol space with the executable and so require a separate DLL containing the Python symbols.

Upvotes: 5

Aziz
Aziz

Reputation: 20705

This is not the best way to do it, but you might consider using executable SFX Archive with both the .exe and .dll files inside, and setting it to execute your .exe file when it's double clicked.

Upvotes: 1

Related Questions