NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1057 most downloaded on PyPI
PyInstaller bundles a Python application and all its dependencies into a single package.
Last release 5 days ago
12 Sep 2026
Ships fairly regularly
a new release about every 6 weeks
Nearly every release is documented
notes for 58 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
14 years old
76 releases · first in 2012
- Remove runtime hook and fix regular hook for matplotlib’s data to support matplotlib>=3.3.0 , fix deprecation warning on version 3.1<= & <3.3, and b…
Add support for Python 3.9. ( #5289 )
Add support for Python 3.8. ( #4311 )
Fix endless recursion if a package’s init module is an extension module. ( #5157 )
Remove duplicate logging messages ( #5277 )
Fix sw_64 architecture support ( #5296 )
(AIX) Include python-malloc labelled libraries in search for libpython. ( #4210 )
Add exclude_datas , include_datas , and filter_submodules to collect_all() . These arguments map to the excludes and includes arguments of collect_data_files , and to the filter argument of collect_submodules . ( #5113 )
Add hook for difflib to not pull in doctests, which is only required when run as main program.
Add hook for distutils.util to not pull in lib2to3 unittests, which will be rarely used in frozen packages.
Add hook for heapq to not pull in doctests, which is only required when run as main program.
Add hook for multiprocessing.util to not pull in python test-suite and thus e.g. tkinter.
Add hook for numpy._pytesttester to not pull in pytest.
Add hook for pickle to not pull in doctests and argparse, which are only required when run as main program.
Add hook for PIL.ImageFilter to not pull numpy, which is an optional component.
Add hook for setuptools to not pull in numpy, which is only imported if installed, not mean to be a dependency
Add hook for zope.interface to not pull in pytest unittests, which will be rarely used in frozen packages.
Add hook-gi.repository.HarfBuzz to fix Typelib error with Gtk apps. ( #5133 )
Enable overriding Django settings path by DJANGO_SETTINGS_MODULE environment variable. ( #5267 )
Fix collect_system_data_files to scan the given input path instead of its parent. File paths returned by collect_all_system_data are now relative to the input path. ( #5110 )
Fix argument order in exec_script() and eval_script() . ( #5300 )
Gevent hook does not unnecessarily bundle HTML documentation, pycache folders, tests nor generated .c and .h files ( #4857 )
gevent: Do not pull in test-suite (still to be refined)
Modify hook for gevent to exclude test submodules. ( #5201 )
Prevent .pyo files from being collected by collect_data_files when include_py_files is False. ( #5141 )
Prevent output to stdout during module imports from ending up in the modules list collected by collect_submodules . ( #5244 )
Remove runtime hook and fix regular hook for matplotlib’s data to support matplotlib>=3.3.0 , fix deprecation warning on version 3.1<= & <3.3, and behave normally for versions <3.1. ( #5006 )
Remove support for deprecated PyQt4 and PySide ( #5118 , #5126 )
setuptools: Exclude outdated compat modules.
Update sqlalchemy hook to support v1.3.19 and later, by adding sqlalchemy.ext.baked as a hidden import ( #5128 )
Update tkinter hook to collect Tcl modules directory ( tcl8 ) in addition to Tcl/Tk data directories. ( #5175 )
(GNU/Linux) {PyQt5,PySide2}.QtWebEngineWidgets: fix search for extra NSS libraries to prevent an error on systems where /lib64/nss/*.so comes up empty. ( #5149 )
(OSX) Avoid collecting data from system Tcl/Tk framework in tkinter hook as we do not collect their shared libraries, either. Affects only python versions that still use the system Tcl/Tk 8.5. ( #5217 )
(OSX) Correctly locate the tcl/tk framework bundled with official python.org python builds from v.3.6.5 on. ( #5013 )
(OSX) Fix the QTWEBENGINEPROCESS_PATH set in PyQt5.QtWebEngineWidgets rthook. ( #5183 )
(OSX) PySide2.QtWebEngineWidgets: add QtQmlModels to included libraries. ( #5150 )
(Windows) Remove the obsolete python2.4-era _handle_broken_tcl_tk work-around for old virtual environments from the tkinter hook. ( #5222 )
Fix freeing memory allocated by Python using free() instead of PyMem_RawFree() . ( #4441 )
(GNU/Linux) Avoid segfault when temp path is missing. ( #5255 )
(GNU/Linux) Replace a strncpy() call in pyi_path_dirname() with snprintf() to ensure that the resulting string is always null-terminated. ( #5212 )
(OSX) Added capability for already-running apps to accept URL & drag’n drop events via Apple Event forwarding ( #5276 )
(OSX) Bump MACOSX_DEPLOYMENT_TARGET from 10.7 to 10.13. ( #4627 , #4886 )
(OSX) Fix to reactivate running app on “reopen” ( #5295 )
(Windows) Use _wfullpath() instead of _fullpath() in pyi_path_fullpath to allow non-ASCII characters in the path. ( #5189 )
Add zlib to build the requirements in the Building the Bootloader section of the docs. ( #5130 )
Add informative message what do to if RecurrsionError occurs. ( #4406 , #5156 )
Prevent a local directory with clashing name from shadowing a system library. ( #5182 )
Use module loaders to get module content instead of an quirky way stemming from early Python 2.x times. ( #5157 )
(OSX) Exempt the Tcl / Tk dynamic libraries in the system framework from relative path overwrite. Fix missing Tcl / Tk dylib on older python.org builds that still make use of the system framework. ( #5172 )
Replace skipif_xxx for platform-specific tests by markers. ( #1427 )
Test/CI: Test failures are automatically retried once. ( #5214 )
Fix AppImage builds that were broken since PyInstaller 3.6. ( #4693 )
Update build system to use Python 3.
OSX: Fixed the ineffectiveness of the --distpath argument for the BUNDLE step. ( #4892 )
OSX: Improve codesigning and notarization robustness. ( #3550 , #5112 )
OSX: Use high resolution mode by default for GUI applications. ( #4337 )
One column per quarter.
- Provide setuptools entrypoints to enable other packages to provide PyInstaller hooks specific to that package, along with tests for these hooks.
Provide setuptools entrypoints to enable other packages to provide PyInstaller hooks specific to that package, along with tests for these hooks.
Maintainers of Python packages requiring hooks are invited to use this new feature and provide up-to-date PyInstaller support along with their package. This is quite easy, see our sample project for more information ( #4232 , #4301 , #4582 ). Many thanks to Bryan A. Jones for implementing the important parts.
A new package pyinstaller-hooks-contrib provides monthly updated hooks now. This package is installed automatically when installing PyInstaller, but can be updated independently. Many thanks to Legorooj for setting up the new package and moving the hooks there.
Added the excludes and includes arguments to the hook utility function collect_data_files .
Change the hook collection order so that the hook-priority is command line, then entry-point, then PyInstaller builtins. ( #4876 )
(AIX) Include python-malloc labelled libraries in search for libpython. ( #4738 )
(win32) Fix Security Alerts caused by subtle implementation differences between posix and windows in os.path.dirname() . ( #4707 )
(win32) Fix struct format strings for VersionInfo. ( #4861 )
(Windows) cv2: bundle the opencv_videoio_ffmpeg*.dll , if available. ( #4999 )
(Windows) GLib: bundle the spawn helper executables for g_spawn* API. ( #5000 )
(Windows) PySide2.QtNetwork: search for SSL DLLs in PrefixPath in addition to BinariesPath . ( #4998 )
(Windows) When building with 32-bit python in onefile mode, set the requestedExecutionLevel manifest key every time and embed the manifest. ( #4992 )
(AIX) Fix uninitialized variable. ( #4728 , #4734 )
Allow building on a different drive than the source. ( #4820 )
Consider Python<version> as possible library binary path. Fixes issue where python is not found if Python3 is installed via brew on OSX ( #4895 )
Ensure shared dependencies from onefile packages can be opened in the bootloader.
Ensuring repeatable builds of base_library.zip. ( #4654 )
Fix FileNotFoundError showing up in utils/misc.py which occurs when a namespace was processed as an filename. ( #4034 )
Fix multipackaging. The MERGE class will now have the correct relative paths between shared dependencies which can correctly be opened by the bootloader. ( #1527 , #4303 )
Fix regression when trying to avoid hard-coded paths in .spec files.
Fix SIGTSTP signal handling to allow typing Ctrl-Z from terminal. ( #4244 )
Update the base library to support encrypting Python bytecode ( --key option) again. Many thanks to Matteo Bertini for finally fixing this. ( #2365 , #3093 , #3133 , #3160 , #3198 , #3316 , #3619 , #4241 , #4652 )
When stripping the leading parts of paths in compiled code objects, the longest possible import path will now be stripped. ( #4922 )
Remove support for Python 2.7. The minimum required version is now Python 3.5. The last version supporting Python 2.7 was PyInstaller 3.6. ( #4623 )
Many hooks are now part of the new pyinstaller-hooks-contrib repository. See below for a detailed list.
Add hook for scipy.stats._stats (needed for scipy since 1.5.0). ( #4981 )
Prevent hook-nltk from adding non-existing directories. ( #3900 )
Fix importlib_resources hook for modern versions (after 1.1.0). ( #4889 )
Fix hidden imports in pkg_resources and packaging ( #5044 )
Add yet more hidden imports to pkg_resources hook.
Mirror the pkg_resources hook for packaging which may or may not be duplicate of pkg_resources._vendor.packaging .
Update pkg_resources hook for setuptools v45.0.0.
Add QtQmlModels to included libraries for QtWebEngine on OS X ( #4631 ).
Fix detecting Qt5 libraries and dependencies from conda-forge builds ( #4636 ).
Add an AssertionError message so that users who get an error due to Hook conflicts can resolve it ( #4626 ).
These hooks have been moved to the new pyinstaller-hooks-contrib repository: BTrees, Crypto, Cryptodome, IPython, OpenGL, OpenGL_accelerate, Xlib, accessible_output2, adios, aliyunsdkcore, amazonproduct, appdirs, appy, astor, astroid, astropy, avro, bacon, boto, boto3, botocore, certifi, clr, countrycode, cryptography, cv2, cx_Oracle, cytoolz, dateparser, dclab, distorm3, dns, docutils, docx, dynaconf, enchant, enzyme, eth_abi, eth_account, eth_hash, eth_keyfile, eth_utils, faker, flex, fmpy, gadfly, gooey, google.*, gst, gtk, h5py, httplib, httplib2, imageio, imageio_ffmpeg, jedi, jinja2, jira, jsonpath_rw_ext, jsonschema, jupyterlab, kinterbasdb, langcodes, lensfunpy, libaudioverse, llvmlite, logilab, lxml, lz4, magic, mako, markdown, migrate, mpl_toolkits, mssql, mysql, nacl, names, nanite, nbconvert, nbdime, nbformat, ncclient, netCDF4, nltk, nnpy, notebook, numba, openpyxl, osgeo, passlib, paste, patsy, pendulum, phonenumbers, pint, pinyin, psychopy, psycopg2, pubsub, pyarrow, pycountry, pycparser, pyexcel, pyexcelerate, pylint, pymssql, pyodbc, pyopencl, pyproj, pysnmp, pytest, pythoncom, pyttsx, pywintypes, pywt, radicale, raven, rawpy, rdflib, redmine, regex, reportlab, reportlab, resampy, selenium, shapely, skimage, sklearn, sound_lib, sounddevice, soundfile, speech_recognition, storm, tables, tcod, tensorflow, tensorflow_corethon, text_unidecode, textdistance, torch, ttkthemes, ttkwidgets, u1db, umap, unidecode, uniseg, usb, uvloop, vtkpython, wavefile, weasyprint, web3, webrtcvad, webview, win32com, wx, xml.dom, xml.sax, xsge_gui, zeep, zmq.
These hooks have been added while now moved to the new pyinstaller-hooks-contrib repository: astor ( #4400 , #4704 ), argon2 ( #4625 ) bcrypt. ( #4735 ), (Bluetooth Low Energy platform Agnostic Klient for Python) ( #4649 ) jaraco.text ( #4576 , #4632 ), LightGBM. ( #4634 ), xmldiff ( #4680 ), puremagic (identify a file based off it’s magic numbers) ( #4709 ) webassets ( #4760 ), tensorflow_core (to support tensorflow module forwarding logic ( #4400 , #4704 )
These changes have been applied to hooks now moved to the new pyinstaller-hooks-contrib repository
Update Bokeh hook for v2.0.0. ( #4742 , #4746 )
Fix shapely hook on Windows for non-conda shapely installations. ( #2834 , #4749 )
Rework bootloader from using strcpy/strncpy with “is this string terminated”-check to use snprintf(); check success at more places. (This started from fixing GCC warnings for strncpy and strncat.)
Fix: When copying files, too much data was copied in most cases. This corrupted the file and inhibited using shared dependencies. ( #4303 )
In debug and windowed mode, show the traceback in dialogs to help debug pyiboot01_bootstrap errors. ( #4213 , #4592 )
Started a small test-suite for bootloader basic functions. ( #4585 )
Add platform-specific usage notes and bootloader build notes for AIX. ( #4731 )
Provide setuptools entrypoints to enable other packages to provide PyInstaller hooks specific to that package, along with tests for these hooks. See https://github.com/pyinstaller/hooksample for more information. ( #4232 , #4582 )
(AIX) The argument -X32 or -X64 is not recognized by the AIX loader - so this code needs to be removed. ( #4730 , #4731 )
(OSX) Allow end users to override MACOSX_DEPLOYMENT_TARGET and mmacosx-version-min via environment variables and set 10.7 as the fallback value for both. ( #4677 )
Do not print info about --noconfirm when option is already being used. ( #4727 )
Update waf to version 2.0.20 ( #4839 )
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →