CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-pyinstaller

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

Pending
Overview
Eval results
Files

cli-interface.mddocs/

CLI Interface

PyInstaller's command-line interface provides comprehensive options for creating standalone executables from Python applications. The CLI handles everything from basic script bundling to complex multi-file applications with custom configurations.

Capabilities

Main Command

The primary pyinstaller command analyzes Python scripts and creates standalone executables.

def run(pyi_args=None, pyi_config=None):
    """
    Main entry point for running PyInstaller programmatically.
    
    Args:
        pyi_args (list, optional): Command-line arguments. If None, uses sys.argv[1:]
        pyi_config (dict, optional): Configuration dictionary for multiple builds
        
    Raises:
        SystemExit: On invalid arguments or build failure
        RecursionError: When recursion limit exceeded during analysis
        KeyboardInterrupt: On user cancellation
    """

Basic Usage Patterns

Single File Executable

Create a standalone executable that unpacks itself when run:

pyinstaller --onefile myscript.py

Directory Distribution

Create a directory containing the executable and all dependencies:

pyinstaller --onedir myscript.py

Windowed Application

Create an application without console window (Windows/macOS):

pyinstaller --windowed myapp.py

File and Data Options

Adding Data Files

Include additional data files in the bundle:

# Single file
pyinstaller --add-data "config.ini:." myscript.py

# Directory (Unix)  
pyinstaller --add-data "data/*:data" myscript.py

# Directory (Windows)
pyinstaller --add-data "data/*;data" myscript.py

Adding Binary Files

Include binary dependencies:

pyinstaller --add-binary "libs/mylib.so:libs" myscript.py

Hidden Imports

Force inclusion of modules not detected automatically:

pyinstaller --hidden-import scipy.integrate myscript.py

Module Exclusion

Exclude modules to reduce bundle size:

pyinstaller --exclude-module matplotlib myscript.py

Output Configuration

Custom Names and Paths

Specify output names and directories:

# Custom executable name
pyinstaller --name MyApplication myscript.py

# Custom output directory
pyinstaller --distpath /path/to/output myscript.py

# Custom working directory  
pyinstaller --workpath /tmp/pyinstaller myscript.py

# Custom spec file location
pyinstaller --specpath /path/to/specs myscript.py

Clean Build

Remove output and working directories before building:

pyinstaller --clean myscript.py

Optimization Options

UPX Compression

Compress binaries using UPX:

# Enable UPX for all binaries
pyinstaller --upx-dir /usr/local/bin myscript.py

# Exclude specific files from UPX
pyinstaller --upx-exclude vcruntime140.dll myscript.py

Debug Strip

Remove debug symbols from binaries:

pyinstaller --strip myscript.py

Advanced Configuration

Custom Hooks

Specify additional hook directories:

pyinstaller --additional-hooks-dir /path/to/hooks myscript.py

Runtime Hooks

Add runtime hooks that execute at application startup:

pyinstaller --runtime-hook runtime_hook.py myscript.py

Path Extensions

Add directories to Python path during analysis:

pyinstaller --paths /extra/python/path myscript.py

Platform-Specific Options

Windows Options

# Request administrator privileges
pyinstaller --uac-admin myscript.py

# Add version resource file
pyinstaller --version-file version.txt myscript.py

# Add custom icon
pyinstaller --icon app.ico myscript.py

# Add Windows manifest
pyinstaller --manifest manifest.xml myscript.py

macOS Options

# Add application icon
pyinstaller --icon app.icns myscript.py

# Enable macOS app bundle creation
pyinstaller --windowed --osx-bundle-identifier com.example.app myscript.py

# Add entitlements file
pyinstaller --osx-entitlements-file entitlements.plist myscript.py

Logging and Debug Options

Verbosity Control

# Increase verbosity
pyinstaller --log-level DEBUG myscript.py

# Quiet output
pyinstaller --log-level WARN myscript.py

Debug Information

# Include debug information in executable
pyinstaller --debug all myscript.py

# Debug imports only
pyinstaller --debug imports myscript.py

Spec File Generation

Create a .spec file without building:

pyinstaller --specpath . --name MyApp --onefile myscript.py --noconfirm

Then edit the .spec file and build with:

pyinstaller MyApp.spec

Common Command Combinations

Production Desktop App

pyinstaller \
  --onefile \
  --windowed \
  --name "My Application" \
  --icon app.ico \
  --add-data "config/*:config" \
  --hidden-import pkg_resources.py2_warn \
  --clean \
  main.py

Development Build

pyinstaller \
  --onedir \
  --console \
  --debug all \
  --clean \
  main.py

Minimal Size Build

pyinstaller \
  --onefile \
  --strip \
  --upx-dir /usr/bin \
  --exclude-module matplotlib \
  --exclude-module numpy \
  main.py

Exit Codes

  • 0: Success
  • 1: General error (invalid arguments, build failure)
  • 2: Keyboard interrupt (Ctrl+C)

Environment Variables

  • PYINSTALLER_COMPILE_BOOTLOADER: Force bootloader compilation
  • PYINSTALLER_BOOTLOADER_WAF_ARGS: Additional WAF arguments for bootloader compilation

Install with Tessl CLI

npx tessl i tessl/pypi-pyinstaller

docs

cli-interface.md

cli-utilities.md

hook-development.md

index.md

platform-features.md

spec-file-classes.md

tile.json