Build standalone executables for Windows


Keywords
packaging-python, py2exe, python, wheel
Licenses
MIT/X11
Install
pip install py2exe==0.12.0.1

Documentation

py2exe for Python 3

py2exe is a software to build standalone Windows executable programs from Python scripts. py2exe can build console executables and windows (GUI) executables. py2exe supports the Python versions* included in the official development cycle.

Development of py2exe is hosted here: https://github.com/py2exe/py2exe.

Changes

The detailed changelog is published on GitHub.

Version 0.13.0.0:

  • Add support for Python 3.11
  • Drop support for Python 3.7
  • Drop support for win32 wheels
    • win32 wheels are still built and shipped but are provided untested. Issues experienced when using these wheels will not be investigated. See #157 for further information.
  • Remove build_exe command line interface. Please use the py2exe.freeze API.

Version 0.12.0.2:

  • Support scipy versions newer than 1.9.2.
  • Fixed documentation for the py2exe.freeze API.

Version 0.12.0.1:

  • Fixed an issue that prevented builds via the deprecated setup.py API.

Version 0.12.0.0:

  • Introduce the new py2exe.freeze API. Documentation can be found here.
  • Use of the setup.py py2exe command and of distutils is deprecated as per PEP 632. Both these interfaces will be removed in the next major release. See here for a migration guide.
  • Add two hooks to fix the bundling of winrt and passlib.

Version 0.11.1.1:

  • The log file for windows apps is now stored in %APPDATA% by default
  • ModuleFinder now raises an explicit error if a required module is in excludes
  • Restore hook functionality for pkg_resources
  • The Stderr.write method used for windows apps now returns the number of written bytes

Version 0.11.1.0:

  • Drop support for Python 3.6
  • Include package metadata in the bundle archive (to be used by e.g. importlib.metadata)
  • Fixed a bug that prevented to use the optimize option when six was in the bundle
  • Fixed a bug that ignored the optimize flag for some packages

Version 0.11.0.1:

  • Show again relative paths in Tracebacks that happen from the frozen application (#12 and #114)

Version 0.11.0.0:

  • New module finder mf310 written as a wrapper around CPython modulefinder.ModuleFinder
  • Add support for Python 3.10
  • New hook for scipy
  • zipextimporter can now be built as a standalone extension via its own setup script

Version 0.10.4.1:

  • ModuleFinder: add support for the pkg_resources.extern.VendorImporter loader
  • New hooks for pkg_resources and infi

Version 0.10.4.0:

  • zipextimporter supports external modules that use multi-phase initialization (PEP 489)
  • New hook for selenium
  • dllfinder provides a new method to add data files in the zip archive

Version 0.10.3.1:

  • New hook for pycryptodomex
  • ModuleFinder: respect excludes list in import_package
  • Updated hook for matplotlib >= 3.4.0

Version 0.10.3.0:

  • New hook for supporting matplotlib 3.2 and higher.
  • Fix for including implicit namespace packages as per PEP420.

Version 0.10.2.1:

  • Patch MyLoadLibrary to support ssl with bundle_files=0.

Version 0.10.2.0:

  • New module finder with support for implicit namespace packages (PEP 420).
  • DLLFinder automatically excludes VC++ redist and Windows CRT DLLs from bundles.
  • Several fixes for bundling software with bundle_files<=2 (only the standard library is supported, other dependencies may or may not work).
  • New hooks for pycryptodome and shapely.

Version 0.10.1.0:

  • Add support for Python 3.9.
  • Drop support for Python 3.5.
  • New hooks for urllib3 and pandas.

Version 0.10.0.2 (from versions 0.9.x):

  • Introduce compatibility with Python 3.5, 3.6, 3.7, and 3.8.
  • Drop compatibility with Python 3.4 and earlier.
  • New or updated hooks for certifi, numpy, tkinter, socket, ssl, and six.
  • build_exe: the zipfile=None option has been removed.
  • runtime: the Python interpreter DLL is no longer altered before being inserted in the executable bundle.
  • Several bugfixes, better error messages.

Installation

pip install py2exe

Usage

Use the py2exe.freeze function as documented here.

Using a setup.py script or the builder

Using a setup.py script with py2exe is deprecated. Please adapt your scripts to use the new freeze API. This interface will be removed in the next major release.

The build_exe (or -m py2exe) CLI was removed in version 0.13.0.0.

Known issues and notes

  • High-level methods or hooks to embed Qt plugins in the bundle (needed by PySide2/PyQt5) are missing.
  • (*) win32 wheels are provided without testing. Users are encouraged to use the win_amd64 wheels (see #157).

Credits

Further informations about the original development of py2exe and other usage guidelines can be found in the original README.