Skip to main content

PyInstaller bundles a Python application and all its dependencies into a single package.

Project description

PyInstaller Overview

PyInstaller bundles a Python application and all its dependencies into a single package. The user can run the packaged app without installing a Python interpreter or any modules.

Help keeping PyInstaller alive: Maintaining PyInstaller is a huge amount of work. PyInstaller development can only continue if users and companies provide sustainable funding. See http://www.pyinstaller.org/funding.html for how to support PyInstaller.

Documentation:

https://pyinstaller.readthedocs.io/

Website:

http://www.pyinstaller.org/

Code:

https://github.com/pyinstaller/pyinstaller

Donate:
Bitcoin: 1JUFjawzWDR7Tc8z9TKXstVFdjkDY9FbtK

PyInstaller reads a Python script written by you. It analyzes your code to discover every other module and library your script needs in order to execute. Then it collects copies of all those files – including the active Python interpreter! – and puts them with your script in a single folder, or optionally in a single executable file.

PyInstaller is tested against Windows, Mac OS X, and GNU/Linux. However, it is not a cross-compiler: to make a Windows app you run PyInstaller in Windows; to make a GNU/Linux app you run it in GNU/Linux, etc. PyInstaller has been used successfully with AIX, Solaris, and FreeBSD, but is not tested against them.

Main Advantages

  • Works out-of-the-box with any Python version 2.7 / 3.4-3.7 (although Python 3.4 is not longer tested by the test-suite).

  • Fully multi-platform, and uses the OS support to load the dynamic libraries, thus ensuring full compatibility.

  • Correctly bundles the major Python packages such as numpy, PyQt4, PyQt5, PySide, Django, wxPython, matplotlib and others out-of-the-box.

  • Compatible with many 3rd-party packages out-of-the-box. (All the required tricks to make external packages work are already integrated.)

  • Libraries like PyQt5, PyQt4, PySide, wxPython, matplotlib or Django are fully supported, without having to handle plugins or external data files manually.

  • Working code signing on OS X.

  • Bundles MS Visual C++ DLLs on Windows.

Installation

PyInstaller is available on PyPI. You can install it through pip:

pip install pyinstaller

Requirements and Tested Platforms

  • Python:

  • 2.7 or 3.4-3.7 (although Python 3.4 is not longer tested by the test-suite)

  • PyCrypto 2.4+ (only if using bytecode encryption)

  • Windows (32bit/64bit):

  • Windows XP or newer.

  • GNU/Linux (32bit/64bit)

  • ldd: Console application to print the shared libraries required by each program or shared library. This typically can be found in the distribution-package glibc or libc-bin.

  • objdump: Console application to display information from object files. This typically can be found in the distribution-package binutils.

  • objcopy: Console application to copy and translate object files. This typically can be found in the distribution-package binutils, too.

  • Mac OS X (64bit):

  • Mac OS X 10.7 (Lion) or newer.

Usage

Basic usage is very simple, just run it against your main script:

pyinstaller /path/to/yourscript.py

For more details, see the manual.

Untested Platforms

The following platforms have been contributed and any feedback or enhancements on these are welcome.

  • FreeBSD

  • ldd

  • Solaris

  • ldd

  • objdump

  • AIX

  • AIX 6.1 or newer. PyInstaller will not work with statically linked Python libraries.

  • ldd

  • PowerPC GNU/Linux (Debian)

Before using any contributed platform, you need to build the PyInstaller bootloader, as we do not ship binary packages. Download PyInstaller source, and build the bootloader:

cd bootloader
python ./waf distclean all

Then install PyInstaller:

python setup.py install

or simply use it directly from the source (pyinstaller.py).

Support

See http://www.pyinstaller.org/support.html for how to find help as well as for commercial support.

Funding

Maintaining PyInstaller is a huge amount of work. PyInstaller development can only continue if users and companies provide sustainable funding. See http://www.pyinstaller.org/funding.html for how to support PyInstaller.

Changelog for PyInstaller

3.5 (2019-07-09)

Features

  • (Windows) Force --windowed option if first script is a .pyw file. This might still be overwritten in the spec-file. (#4001)

  • Add support for relative paths for icon-files, resource-files and version-resource-files. (#3333, #3444)

  • Add support for the RedHat Software Collections (SCL) Python 3.x. (#3536, #3881)

  • Install platform-specific dependencies only on that platform. (#4166, #4173)

  • New command-line option --upx-exclude, which allows the user to prevent binaries from being compressed with UPX. (#3821)

Bugfix

  • (conda) Fix detection of conda/anaconda platform.

  • (GNU/Linux) Fix Anaconda Python library search. (#3885, #4015)

  • (Windows) Fix UAC in one-file mode by embedding the manifest. (#1729, #3746)

  • (Windows\Py3.7) Now able to locate pylib when VERSION.dll is listed in python.exe PE Header rather than pythonXY.dll (#3942, #3956)

  • Avoid errors if PyQt5 or PySide2 is referenced by the modulegraph but isn’t importable. (#3997)

  • Correctly parse the --debug=import, --debug=bootloader, and --debug=noarchive command-line options. (#3808)

  • Don’t treat PyQt5 and PySide2 files as resources in an OS X windowed build. Doing so causes the resulting frozen app to fail under Qt 5.12. (#4237)

  • Explicitly specify an encoding of UTF-8 when opening all text files. (#3605)

  • Fix appending the content of datas in a spec files to binaries instead of the internal datas. (#2326, #3694)

  • Fix crash when changing from --onefile to --onedir on consecutive runs. (#3662)

  • Fix discovery of Qt paths on Anaconda. (#3740)

  • Fix encoding error raised when reading a XML manifest file which includes non-ASCII characters. This error inhibited building an executable which has non-ASCII characters in the filename. (#3478)

  • Fix inputs to QCoreApplication constructor in Qt5LibraryInfo. Now the core application’s initialization and finalization in addition to system-wide and application-wide settings is safer. (#4121)

  • Fix installation with pip 19.0. (#4003)

  • Fixes PE-file corruption during version update. (#3142, #3572)

  • In the fake ´site` module set USER_BASE to empty string instead of None as Jupyter Notebook requires it to be a ‘str’. (#3945)

  • Query PyQt5 to determine if SSL is supported, only adding SSL DLLs if so. In addition, search the path for SSL DLLs, instead of looking in Qt’s BinariesPath. (#4048)

  • Require pywin32-ctypes version 0.2.0, the minimum version which supports Python 3.7. (#3763)

  • Use pkgutil instead of filesystem operations for interacting with the modules. (#4181)

Incompatible Changes

  • PyInstaller is no longer tested against Python 3.4, which is end-of-live.

  • Functions compat.architecture(), compat.system() and compat.machine() have been replace by variables of the same name. This avoids evaluating the save several times.

  • Require an option for the --debug argument, rather than assuming a default of all. (#3737)

Hooks

  • Added hooks for aliyunsdkcore (#4228), astropy (#4274), BTrees (#4239), dateparser.utils.strptime (#3790), faker (#3989, #4133), gooey (#3773), GtkSourceView (#3893), imageio_ffmpeg (#4051), importlib_metadata and importlib_resources (#4095), jsonpath_rw_ext (#3841), jupyterlab (#3951), lz4 (#3710), magic (#4267), nanite (#3860), nbconvert (#3947), nbdime (#3949), nbformat (#3946), notebook (#3950), pendulum (#3906), pysoundfile (#3844), python-docx (#2574, #3848), python-wavefile (#3785), pytzdata (#3906), PyWavelets pywt (#4120), pywebview (#3771), radicale (#4109), rdflib (#3708), resampy (#3702), sqlalchemy-migrate (#4250), textdistance (#4239), tcod (#3622), ttkthemes (#4105), and umap-learn (#4165).

  • Add runtime hook for certifi. (#3952)

  • Updated hook for ‘notebook’ to look in all Jupyter paths reported by jupyter_core. (#4270)

  • Fixed hook for ‘notebook’ to only include directories that actually exist. (#4270)

  • Fixed pre-safe-import-module hook for setuptools.extern.six. (#3806)

  • Fixed QtWebEngine hook on OS X. (#3661)

  • Fixed the QtWebEngine hook on distributions which don’t have a NSS subdir (such as Archlinux) (#3758)

  • Include dynamically-imported backends in the eth_hash package. (#3681)

  • Install platform-specific dependencies only on that platform. (#4168)

  • Skip packaging PyQt5 QML files if the QML directory doesn’t exist. (#3864)

  • Support ECC in PyCryptodome. (#4212, #4229)

  • Updated PySide2 hooks to follow PyQt5 approach. (#3655, #3689, #3724, #4040, #4103, #4136, #4175, #4177, #4198, #4206)

  • Updated the jsonschema hook for v3.0+. (#4100)

  • Updated the Sphinx hook to correctly package Sphinx 1.8.

Bootloader

  • Update bundled zlib library to 1.2.11 address vulnerabilities. (#3742)

Documentation

  • Update the text produced by --help to state that the --debug argument requires an option. Correctly format this argument in the Sphinx build process. (#3737)

Project & Process

  • Remove the PEP-518 “build-system” table from pyproject.toml to fix installation with pip 19.0.

PyInstaller Core

  • Add support for folders in COLLECT and BUNDLE. (#3653)

  • Completely remove pywin32 dependency, which has erratic releases and the version on pypi may no longer have future releases. Require pywin32-ctypes instead which is pure python. (#3728, #3729)

  • modulegraph: Align with upstream version 0.17.

  • Now prints a more descriptive error when running a tool fails (instead of dumping a trace-back). (#3772)

  • Suppress warnings about missing UCRT dependencies on Win 10. (#1566, #3736)

Test-suite and Continuous Integration

  • Fix Appveyor failures of test_stderr_encoding() and test_stdout_encoding() on Windows Python 3.7 x64. (#4144)

  • November update of packages used in testing. Prevent pyup from touching test/requirements-tools.txt. (#3845)

  • Rewrite code to avoid a RemovedInPytest4Warning: Applying marks directly to parameters is deprecated, please use pytest.param(..., marks=...) instead.

  • Run Travis tests under Xenial; remove the deprecated sudo: false tag. (#4140)

  • Update the Markdown test to comply with Markdown 3.0 changes by using correct syntax for extensions.

3.4 (2018-09-09)

Features

  • Add support for Python 3.7 (#2760, #3007, #3076, #3399, #3656), implemented by Hartmut Goebel.

  • Improved support for Qt5-based applications (#3439). By emulating much of the Qt deployment tools’ behavior most PyQt5 variants are supported. However, Anaconda’s PyQt5 packages are not supported because its QlibraryInfo implementation reports incorrect values. CI tests currently run on PyQt5 5.11.2. Many thanks to Bryan A. Jones for taking this struggle.

  • --debug now allows more debugging to be activated more easily. This includes bootloader messages, Python’s “verbose imports” and store collected Python files in the output directory instead of freezing. See pyinstaller –-help for details. (#3546, #3585, #3587)

  • Hint users to install development package for missing pyconfig.h. (#3348)

  • In setup.py specify Python versions this distribution is compatible with.

  • Make base_library.zip reproducible: Set time-stamp of files. (#2952, #2990)

  • New command-line option --bootloader-ignore-signals to make the bootloader forward all signals to the bundle application. (#208, #3515)

  • (OS X) Python standard library module plistlib is now used for generating the Info.plist file. This allows passing complex and nested data in info_plist. (#3532, #3541)

Bugfix

  • Add missing warnings module to base_library.zip. (#3397, #3400)

  • Fix and simplify search for libpython on Windows, msys2, cygwin. (#3167, #3168)

  • Fix incompatibility with pycryptodome (a replacement for the apparently abandoned pycrypto library) when using encrypted PYZ-archives. (#3537)

  • Fix race condition caused by the bootloader parent process terminating before the child is finished. This might happen e.g. when the child process itself plays with switch_root. (#2966)

  • Fix wrong security alert if a filename contains ... (#2641, #3491)

  • Only update resources of cached files when necessary to keep signature valid. (#2526)

  • (OS X) Fix: App icon appears in the dock, even if LSUIElement=True. (#1917, #2075, #3566)

  • (Windows) Fix crash when trying to add resources to Windows executable using the --resource option. (#2675, #3423)

  • (Windows) Only update resources when necessary to keep signature valid (#3323)

  • (Windows) Use UTF-8 when reading XML manifest file. (#3476)

  • (Windows) utils/win32: trap invalid --icon arguments and terminate with a message. (#3126)

Incompatible Changes

  • Drop support for Python 3.3 (#3288), Thanks to Hugo and xoviat.

  • --debug now expects an (optional) argument. Thus using --debug script.py will break. Use … script.py --debug or --debug=all script.py instead. Also --debug=all (which is the default if no argument is given) includes noarchive, which will store all collected Python files in the output directory instead of freezing them. Use --debug=bootloader to get the former behavior. (#3546, #3585, #3587)

  • (minor) Change naming of intermediate build files and the warn file. This only effects 3rd-party tools (if any exists) relying on the names of these files.

  • (minor) The destination path for --add-data and --add-binary must no longer be empty, use . instead. (#3066)

  • (minor) Use standard path, not dotted path, for C extensions (Python 3 only).

Hooks

  • New hooks for bokeh visualization library (#3607), Champlain, Clutter (#3443) dynaconf (#3641), flex (#3401), FMPy (#3589), gi.repository.xlib (#2634, #3396) google-cloud-translate, google-api-core (#3658), jedi (#3535, #3612), nltk (#3705), pandas (#2978, #2998, #2999, #3015, #3063, #3079), phonenumbers (#3381, #3558), pinyin (#2822), PySide.phonon, PySide.QtSql (#2859), pytorch (#3657), scipy (#2987, #3048), uvloop (#2898), web3, eth_account, eth_keyfile (#3365, #3373).

  • Updated hooks for Cryptodome 3.4.8, Django 2.1, gevent 1.3. Crypto (support for PyCryptodome) (#3424), Gst and GdkPixbuf (to work on msys2, #3257, #3387), sphinx 1.7.1, setuptools 39.0.

  • Updated hooks for PyQt5 (#1930, #1988, #2141, #2156, #2220, #2518, #2566, #2573, #2577, #2857, #2924, #2976, #3175, #3211, #3233, #3308, #3338, #3417, #3439, #3458, #3505), among others:

    • All QML is now loaded by QtQml.QQmlEngine.

    • Improve error reporting when determining the PyQt5 library location.

    • Improved method for finding qt.conf.

    • Include OpenGL fallback DLLs for PyQt5. (#3568).

    • Place PyQt5 DLLs in the correct location (#3583).

  • Fix hooks for cryptodome (#3405), PySide2 (style mismatch) (#3374, #3578)

  • Fix missing SSL libraries on Windows with PyQt5.QtNetwork. (#3511, #3520)

  • Fix zmq on Windows Python 2.7. (#2147)

  • (GNU/Linux) Fix hook usb: Resolve library name reported by usb.backend. (#2633, #2831, #3269)

  • Clean up the USB hook logic.

Bootloader

  • Forward all signals to the child process if option pyi-bootloader-ignore-signals to be set in the archive. (#208, #3515)

  • Use waitpid instead of wait to avoid the bootloder parent process gets signaled. (#2966)

  • (OS X) Don’t make the application a GUI app by default, even in --windowed mode. Not enforcing this programmatically in the bootloader allows to control behavior using Info.plist options - which can by set in PyInstaller itself or in the .spec-file. (#1917, #2075, #3566)

  • (Windows) Show respectivly print utf-8 debug messages ungarbled. (#3477)

  • Fix setenv() call when HAVE_UNSETENV is not defined. (#3722, #3723)

Module Loader

  • Improved error message in case importing an extension module fails. (#3017)

Documentation

  • Fix typos, smaller errors and formatting errors in documentation. (#3442, #3521, #3561, #3638)

  • Make clear that --windowed is independent of --onedir. (#3383)

  • Mention imports using imports imp.find_module() are not detected.

  • Reflect actual behavior regarding LD_LIBRARY_PATH. (#3236)

  • (OS X) Revise section on info_plist for plistlib functionality and use an example more aligned with real world usage. (#3532, #3540, #3541)

  • (developers) Overhaul guidelines for commit and commit-messages. (#3466)

  • (developers) Rework developer’s quick-start guide.

Project & Process

  • Add a pip requirements.txt file.

  • Let pyup update package requirements for “Test – Libraries” every month only.

  • Use towncrier to manage the change log entries. (#2756, #2837, #3698)

PyInstaller Core

  • Add requirements_for_package() and collect_all() helper functions for hooks.

  • Add a explanatory header to the warn-file, hopefully reducing the number of those posting the file to the issue tracker.

  • Add module enum to base_library.zip, required for module re in Python 3.6 (and re is required by warnings).

  • Always write the warn file.

  • Apply format_binaries_and_datas() (which converts hook-style tuples into TOC-style tuples) to binaries and datas added through the hook api.

  • Avoid printing a useless exceptions in the get_module_file_attribute() helper function..

  • Don’t gather Python extensions in collect_dynamic_libc().

  • Fix several ResourceWarnings and DeprecationWarnings (#3677)

  • Hint users to install necessary development packages if, in format_binaries_and_datas(), the file not found is pyconfig.h. (#1539, #3348)

  • Hook helper function is_module_satisfies() returns False for packages not found. (#3428, #3481)

  • Read data for cache digest in chunks. (#3281)

  • Select correct file extension for C-extension file-names like libzmq.cp36-win_amd64.pyd.

  • State type of import (conditional, delayed, etc.) in the warn file again.

  • (modulegraph) Unbundle altgraph library, use from upstream. (#3058)

  • (OS X) In --console mode set LSBackgroundOnly=True in``Info.plist`` to hide the app-icon in the dock. This can still be overruled by passing info_plist in the .spec-file. (#1917, #3566)

  • (OS X) Use the python standard library plistlib for generating the Info.plist file. (#3532, #3541)

  • (Windows) Completely remove pywin32 dependency, which has erratic releases and the version on pypi may no longer have future releases. Require pywin32-ctypes instead, which is pure python. (#3141)

  • (Windows) Encode manifest before updating resource. (#3423)

  • (Windows) Make import compatible with python.net, which uses an incompatible signature for __import__. (#3574)

Test-suite and Continuous Integration

  • Add script and dockerfile for running tests in docker. (Contributed, not maintained) (#3519)

  • Avoid log messages to be written (and captured) twice.

  • Fix decorator skipif_no_compiler.

  • Fix the test for the “W” run-time Python option to verify module warnings can actually be imported. (#3402, #3406)

  • Fix unicode errors when not capturing output by pytest.

  • Run pyinstaller -h to verify it works.

  • test_setuptools_nspkg no longer modifies source files.

  • Appveyor:

    • Add documentation for Appveyor variables used to appveyor.yml.

    • Significantly clean-up appveyor.yml (#3107)

    • Additional tests produce > 1 hour runs. Split each job into two jobs.

    • Appveyor tests run on 2 cores; therefore, run 2 jobs in parallel.

    • Reduce disk usage.

    • Split Python 2.7 tests into two jobs to avoid the 1 hour limit.

    • Update to use Windows Server 2016. (#3563)

  • Travis

    • Use build-stages.

    • Clean-up travis.yml (#3108)

    • Fix Python installation on OS X. (#3361)

    • Start a X11 server for the “Test - Libraries” stage only.

    • Use target python interpreter to compile bootloader to check if the build tool can be used with that this Python version.

Bootloader build

  • Print invoking python version when compiling.

  • Update waf build-tool to 2.0.9 and fix our wscript for waf 2.0.

  • (GNU/Linux) When building with --debug turn of FORTIFY_SOURCE to ease debugging.

Known Issues

  • Anaconda’s PyQt5 packages are not supported because its QlibraryInfo implementation reports incorrect values.

  • All scripts frozen into the package, as well as all run-time hooks, share the same global variables. This issue exists since v3.2 but was discovered only lately, see 3037. This may lead to leaking global variables from run-time hooks into the script and from one script to subsequent ones. It should have effects in rare cases only, though.

  • Data-files from wheels, unzipped eggs or not ad egg at all are not included automatically. This can be worked around using a hook-file, but may not suffice when using --onefile and something like python-daemon.

  • The multipackage (MERGE) feature (1527) is currently broken.

  • (OSX) Support for OpenDocument events (1309) is broken.

  • (Windows) With Python 2.7 the frozen application may not run if the user-name (more specifically %TEMPDIR%) includes some Unicode characters. This does not happen with all Unicode characters, but only some and seems to be a windows bug. As a work-around please upgrade to Python 3 (2754, 2767).

  • (Windows) For Python >= 3.5 targeting Windows < 10, the developer needs to take special care to include the Visual C++ run-time .dlls. Please see the section Platform-specific Notes <Platform-specific Notes - Windows> in the manual. (1566)

3.3.1 (2017-12-13)

Hooks

  • Fix imports in hooks accessible_output and sound_lib (#2860).

  • Fix ImportError for sysconfig for 3.5.4 Conda (#3105, #3106).

  • Fix shapely hook for conda environments on Windows (#2838).

  • Add hook for unidecode.

Bootloader

  • (Windows) Pre-build bootloaders (and custom-build ones using MSVC) can be used on Windows XP again. Set minimum target OS to XP (#2974).

Bootloader build

  • Fix build for FreeBSD (#2861, #2862).

PyInstaller Core

  • Usage: Add help-message clarifying use of options when a spec-file is provided (#3039).

  • Add printing infos on UnicodeDecodeError in exec_command(_all).

  • (win32) Issue an error message on errors loading the icon file (#2039).

  • (aarch64) Use correct bootloader for 64-bit ARM (#2873).

  • (OS X) Fix replacement of run-time search path keywords (@… ) (#3100).

  • Modulegraph

    • Fix recursion too deep errors cause by reimporting SWIG-like modules (#2911, #3040, #3061).

    • Keep order of imported identifiers.

Test-suite and Continuous Integration

  • In Continuous Integration tests: Enable flake8-diff linting. This will refuse all changed lines not following PEP 8.

  • Enable parallel testing on Windows,

  • Update requirements.

  • Add more test cases for modulegraph.

  • Fix a test-case for order of module import.

  • Add test-cases to check scripts do not share the same global vars (see v3.3.1 known issues).

Documentation

  • Add clarification about treatment of options when a spec-file is provided (#3039).

  • Add docs for running PyInstaller with Python optimizations (#2905).

  • Add notes about limitations of Cython support.

  • Add information how to handle undetected ctypes libraries.

  • Add notes about requirements and restrictions of SWIG support.

  • Add note to clarify what binary files are.

  • Add a Development Guide.

  • Extend “How to Contribute”.

  • Add “Running the Test Suite”.

  • Remove badges from the Readme (#2853).

  • Update outdated sections in man-pages and otehr enhancements to the man-page.

Known Issues

  • All scripts frozen into the package, as well as all run-time hooks, share the same global variables. This issue exists since v3.2 but was discovered only lately, see 3037. This may lead to leaking global variables from run-time hooks into the script and from one script to subsequent ones. It should have effects in rare cases only, though.

  • Further see the Known Issues for release 3.3 <v3.3 known issues>.

3.3 (2017-09-21)

  • Add Support for Python 3.6! Many thanks to xiovat! (#2331, #2341)

  • New command line options for adding data files (--datas, #1990) and binaries (--binaries, #703)

  • Add command line option ‘–runtime-tmpdir’.

  • Bootloaders for Windows are now build using MSVC and statically linked with the run-time-library (CRT). This solved a lot of issues related to .dlls being incompatible with the ones required by python.dll.

  • Bootloaders for GNU/Linux are now officially no LSB binaries. This was already the case since release 3.1, but documented the other way round. Also the build defaults to non-LSB binaries now. (#2369)

  • We improved and stabilized both building the bootloaders and the continuous integration tests. See below for details. Many thanks to all who worked on this.

  • To ease solving issues with packages included wrongly, the html-file with a cross-reference is now always generated. It’s visual appearance has been modernized (#2765).

Incompatible changes

  • Command-line option obsoleted several version ago are not longer handled gracefully but raise an error (#2413)

  • Installation: PyInstaller removed some internal copies of 3rd-party packages. These are now taken from their official releases at PyPI (#2589). This results in PyInstaller to no longer can be used from just an unpacked archive, but needs to be installed like any Python package. This should effect only a few people, e.g. the developers.

  • Following 527, we only release one source archive now and decided to use .tar.gz (#2754).

Hooks

  • New and Updated hooks: accessible_output2 (#2266), ADIOS (#2096), CherryPy (#2112), PySide2 (#2471, #2744) (#2472), Sphinx (#2612, 2708) (#2708), appdir (#2478), clr (#2048), cryptodome (#2125), cryptography (#2013), dclab (#2657), django (#2037), django migrations (#1795), django.contrib (#2336), google.cloud, google.cloud.storage, gstreamer (#2603), imageio (#2696), langcodes (#2682), libaudioverse (#2709), mpl_toolkits (#2400), numba, llvmlite (#2113), openpyxl (#2066), pylint, pymssql, pyopencl, pyproj (#2677), pytest (#2119), qtawesome (#2617), redmine, requests (#2334), setuptools, setuptools (#2565), shapely (#2569), sound_lib (#2267), sysconfig, uniseg (#2683), urllib3, wx.rc (#2295),

    • numpy: Look for .dylib libraries, too ( (#2544), support numpy MKL builds (#1881, #2111)

    • osgeo: Add conda specific places to check for auxiliary data (#2401)

    • QT and related

      • Add hooks for PySide2

      • Eliminate run-time hook by placing files in the correct directory

      • Fix path in homebrew for searching for qmake (#2354)

      • Repair Qt dll location (#2403)

      • Bundle PyQT 5.7 DLLs (#2152)

      • PyQt5: Return qml plugin path including subdirectory (#2694)

      • Fix hooks for PyQt5.QtQuick (#2743)

      • PyQt5.QtWebEngineWidgets: Include files needed by QWebEngine

    • GKT+ and related

      • Fix Gir file path on windows.

      • Fix unnecessary file search & generation when GI’s typelib is exists

      • gi: change gir search path when running from a virtualenv

      • gi: package gdk-pixbuf in osx codesign agnostic dir

      • gi: rewrite the GdkPixbuf loader cache at runtime on Linux

      • gi: support onefile mode for GdkPixbuf

      • gi: support using gdk-pixbuf-query-loaders-64 when present

      • gi: GIR files are only required on OSX

      • gio: copy the mime.cache also

      • Fix hooks for PyGObject on windows platform (#2306)

  • Fixed hooks: botocore (#2384), clr (#1801), gstreamer (#2417), h5py (#2686), pylint, Tix data files (#1660), usb.core (#2088), win32com on non-windows-systems (#2479)

  • Fix multiprocess spawn mode on POSIX OSs (#2322, #2505, #2759, #2795).

Bootloader

  • Add tempdir option to control where bootloader will extract files (#2221)

  • (Windows) in releases posted on PyPI requires msvcr*.dll (#2343)

  • Fix unsafe string manipulation, resource and memory leaks. Thanks to Vito Kortbeek (#2489, #2502, #2503)

  • Remove a left-over use of getenv()

  • Set proper LISTEN_PID (set by systemd) in child process (#2345)

  • Adds PID to bootloader log messages (#2466, #2480)

  • (Windows) Use _wputenv_s() instead of SetEnvironmentVariableW()

  • (Windows) Enhance error messages (#1431)

  • (Windows) Add workaround for a Python 3 issue http://bugs.python.org/issue29778 (#2496, #2844)

  • (OS X): Use single process for –onedir mode (#2616, #2618)

  • (GNU/Linux) Compile bootloaders with –no-lsb by default (#2369)

  • (GNU/Linux) Fix: linux64 bootloader requires glibc 2.14 (#2160)

  • (GNU/Linux) set_dynamic_library_path change breaks plugin library use (#625)

Bootloader build

The bootloader build was largely overhauled. In the wscript, the build no longer depends on the Python interpreter’s bit-size, but on the compiler. We have a machine for building bootloaders for Windows and cross-building for OS X. Thus all mainteriner are now able to build the bootloaders for all supported platforms.

  • Add “official” build-script.

  • (GNU/Linux) Make –no-lsb the default, add option –lsb.

  • Largely overhauled Vagrantfile:

    • Make Darwin bootloaders build in OS X box (unused)

    • Make Windows bootloaders build using MSVC

    • Allow specifying cross-target on linux64.

    • Enable cross-building for OS X.

    • Enable cross-building for Windows (unused)

    • Add box for building osxcross.

  • Largely overhauled wscript:

    • Remove options –target-cpu.

    • Use compiler’s target arch, not Python’s.

    • Major overhaul of the script

    • Build zlib if required, not if “on windows”.

    • Remove obsolete warnings.

    • Update Solaris, AIX and HPUX support.

    • Add flags for ‘strip’ tool in AIX platform.

    • Don’t set POSIX / SUS version defines.

  • (GNU/Linux) for 64-bit arm/aarch ignore the gcc flag -m64 (#2801).

Module loader

  • Implement PEP-451 ModuleSpec type import system (#2377)

  • Fix: Import not thread-save? (#2010, #2371)

PyInstaller Core

  • Analyze: Check Python version when testing whether to rebuild.

  • Analyze: Don’t fail on syntax error in modules, simply ignore them.

  • Better error message when datas are not found. (#2308)

  • Building: OSX: Use unicode literals when creating Info.plist XML

  • Building: Don’t fail if “datas” filename contain glob special characters. (#2314)

  • Building: Read runtime-tmpdir from .spec-file.

  • Building: Update a comment.

  • building: warn users if bincache gets corrupted. (#2614)

  • Cli-utils: Remove graceful handling of obsolete command line options.

  • Configure: Create new parent-dir when moving old cache-dir. (#2679)

  • Depend: Include vcruntime140.dll on Windows. (#2487)

  • Depend: print nice error message if analyzed script has syntax error.

  • Depend: When scanning for ctypes libs remove non-basename binaries.

  • Enhance run-time error message on ctypes import error.

  • Fix #2585: py2 non-unicode sys.path been tempted by os.path.abspath(). (#2585)

  • Fix crash if extension module has hidden import to ctypes. (#2492)

  • Fix handling of obsolete command line options. (#2411)

  • Fix versioninfo.py breakage on Python 3.x (#2623)

  • Fix: “Unicode-objects must be encoded before hashing” (#2124)

  • Fix: UnicodeDecodeError - collect_data_files does not return filenames as unicode (#1604)

  • Remove graceful handling of obsolete command line options. (#2413)

  • Make grab version more polite on non-windows (#2054)

  • Make utils/win32/versioninfo.py round trip the version info correctly.

  • Makespec: Fix version number processing for PyCrypto. (#2476)

  • Optimizations and refactoring to modulegraph and scanning for ctypes dependencies.

  • pyinstaller should not crash when hitting an encoding error in source code (#2212)

  • Remove destination for COLLECT and EXE prior to copying it (#2701)

  • Remove uninformative traceback when adding not found data files (#2346)

  • threading bug while processing imports (#2010)

  • utils/hooks: Add logging to collect_data_files.

  • (win32) Support using pypiwin32 or pywin32-ctypes (#2602)

  • (win32) Use os.path.normpath to ensure that system libs are excluded.

  • (win32) Look for libpython%.%.dll in Windows MSYS2 (#2571)

  • (win32) Make versioninfo.py round trip the version info correctly (#2599)

  • (win32) Ensure that pywin32 isn’t imported before check_requirements is called

  • (win32) pyi-grab_version and –version-file not working? (#1347)

  • (win32) Close PE() object to avoid mmap memory leak (#2026)

  • (win32) Fix: ProductVersion in windows version info doesn’t show in some cases (#846)

  • (win32) Fix multi-byte path bootloader import issue with python2 (#2585)

  • (win32) Forward DYLD_LIBRARY_PATH through arch command. (#2035)

  • (win32) Add vcruntime140.dll to_win_includes for Python 3.5 an 3.6 (#2487)

  • (OS X) Add libpython%d.%dm.dylib to Darwin (is_darwin) PYDYLIB_NAMES. (#1971)

  • (OS X) macOS bundle Info.plist should be in UTF-8 (#2615)

  • (OS X) multiprocessing spawn in python 3 does not work on macOS (#2322)

  • (OS X) Pyinstaller not able to find path (@rpath) of dynamic library (#1514)

  • Modulegraph

    • Align with upstream version 0.13.

    • Add the upstream test-suite

    • Warn on syntax error and unicode error. (#2430)

    • Implement enumerate_instructions() (#2720)

    • Switch byte-code analysis to use Instruction (like dis3 does) (#2423)

    • Log warning on unicode error instead of only a debug message (#2418)

    • Use standard logging for messages. (#2433)

    • Fix to reimport failed SWIG C modules (1522, #2578).

  • Included 3rd-party libraries

    • Remove bundled pefile and macholib, use the releases from PyPI. (#1920, #2689)

    • altgraph: Update to altgraph 0.13, add upstream test-suite.

Utilities

  • grab_version.py: Display a friendly error message when utility fails (#859, #2792).

Test-suite and Continuous Integration

  • Rearrange requirements files.

  • Pin required versions – now updated using pyup (#2745)

  • Hide useless trace-backs of helper-functions.

  • Add a test for PyQt5.QtQuick.

  • Add functional tests for PySide2

  • Add test for new feature –runtime-tmpdir.

  • Fix regression-test for #2492.

  • unit: Add test-cases for PyiModuleGraph.

  • unit/altgraph: Bringing in upstream altgraph test-suite.

  • unit/modulegraph: Bringing in the modulegraph test-suite.

  • Continuous Integration

    • Lots of enhancements to the CI tests to make them more stabile and reliable.

    • Pin required versions – now updated using pyup (#2745)

    • OS X is now tested along with GNU/Linux at Travis CI (#2508)

    • Travis: Use stages (#2753)

    • appveyor: Save cache on failure (#2690)

    • appveyor: Verify built bootloaders have the expected arch.

Documentation

  • Add information how to donate (#2755, #2772).

  • Add how to install the development version using pip.

  • Fix installation instructions for development version. (#2761)

  • Better examples for hidden imports.

  • Clarify and fix “Adding Data Files” and “Adding Binary Files”. (#2482)

  • Document new command line option ‘–runtime-tmpdir’.

  • pyinstaller works on powerpc linux, big endian arch (#2000)

  • Largely rewrite section “Building the Bootloader”, update from the wiki page.

  • Describe building LSB-compliant bootloader as (now) special case.

  • help2rst: Add cross-reference labels for option-headers.

  • Enable sphinx.ext.intersphinx and links to our website.

  • Sphinx should not “adjust” display of command line documentation (#2217)

Known Issues

  • Data-files from wheels, unzipped eggs or not ad egg at all are not included automatically. This can be worked around using a hook-file, but may not suffice when using --onefile and something like python-daemon.

  • The multipackage (MERGE) feature (#1527) is currently broken.

  • (OSX) Support for OpenDocument events (#1309) is broken.

  • (Windows) With Python 2.7 the frozen application may not run if the user-name (more specifically %TEMPDIR%) includes some Unicode characters. This does not happen with all Unicode characters, but only some and seems to be a windows bug. As a work-around please upgrade to Python 3 (#2754, #2767).

  • (Windows) For Python >= 3.5 targeting Windows < 10, the developer needs to take special care to include the Visual C++ run-time .dlls. Please see the section Platform-specific Notes <Platform-specific Notes - Windows> in the manual. (#1566)

  • For Python 3.3, imports are not thread-safe (#2371#). Since Python 3.3 is end of live at 2017-09-29, we are not going to fix this.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

PyInstaller-3.5.tar.gz (3.5 MB view details)

Uploaded Source

File details

Details for the file PyInstaller-3.5.tar.gz.

File metadata

  • Download URL: PyInstaller-3.5.tar.gz
  • Upload date:
  • Size: 3.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.0 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.3

File hashes

Hashes for PyInstaller-3.5.tar.gz
Algorithm Hash digest
SHA256 ee7504022d1332a3324250faf2135ea56ac71fdb6309cff8cd235de26b1d0a96
MD5 03eaa433503ae266f212a2488953d67b
BLAKE2b-256 e2c90b44b2ea87ba36395483a672fddd07e6a9cb2b8d3c4a28d7ae76c7e7e1e5

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page