Skip to main content

xsetuper

xsetuper creates standalone executables from Python scripts, with the same performance as the original script. It is cross-platform and should work on any platform that Python runs on.

Features

  • Cross-platform: Windows, macOS, Linux
  • Built-in GUI — manage, configure and build projects visually; no extra dependencies (uses tkinter from the standard library)
  • Fast builds with optimized module discovery
  • Simple CLI: xsetuper --script myapp.py to freeze
  • pyproject.toml configuration support
  • GUI and console application support
  • MSI, DMG, AppImage, DEB, RPM installer generation
  • Automatic dependency detection

Graphical Interface

xsetuper ships with a full graphical interface — no extra packages to install:

xsetuper gui
# or
xsetuper-gui
# or open a specific project folder
xsetuper-gui /path/to/project

The GUI provides:

  • Project manager — save/load projects (.xsetuper.json) and export pyproject.toml
  • Recent projects list with one-click reopening
  • Multiple executables per project, with icon, base (console/gui), manifest, shortcut and UAC options
  • Module control — include/exclude lists, packages, build constants
  • Files & zip control — extra data files, zip include/exclude packages, path replacement
  • Smart setup — analyzes your script's imports and suggests include/exclude lists
  • Quickstart wizard — two questions and your project is ready
  • One-click build with live console output, cancel support, and post-build actions (run app / open output folder)
  • Installer creation — MSI, DMG, AppImage, DEB, RPM toggles run automatically after build (per platform)
  • Dark / light themes with automatic system detection

Installation

pip install xsetuper

Or with conda:

conda install -c conda-forge xsetuper

Quick Start

CLI Usage

The simplest way to freeze your Python application:

xsetuper --script myapp.py

This creates a standalone executable in build/exe.<platform>-<python-version>/.

Common CLI Options

# Specify output directory
xsetuper --script myapp.py --target-dir dist/

# Set custom executable name
xsetuper --script myapp.py --target-name MyApp

# Include an icon
xsetuper --script myapp.py --icon icon.ico

# GUI application (no console window on Windows)
xsetuper --script myapp.py --base gui

# Build with optimization
xsetuper build_exe --optimize=2

pyproject.toml Configuration

Add your freeze configuration directly in pyproject.toml:

[tool.xsetuper.build_exe]
excludes = ["tkinter", "unittest"]
includes = ["my_package"]
optimize = 1
silent = false

[[tool.xsetuper.executables]]
script = "myapp.py"
base = "gui"
target_name = "MyApp"
icon = "icon.ico"

Then build with:

xsetuper build_exe

Python API

from xsetuper import setup, Executable

setup(
    name="MyApp",
    version="1.0",
    description="My Application",
    executables=[
        Executable(
            "myapp.py",
            base="gui",
            target_name="MyApp",
            icon="icon.ico",
        )
    ],
)

Creating Installers

Windows (MSI)

xsetuper bdist_msi

macOS (DMG)

xsetuper bdist_dmg

Linux (AppImage)

xsetuper bdist_appimage

Linux (DEB)

xsetuper bdist_deb

Advanced Usage

Excluding Modules

[tool.xsetuper.build_exe]
excludes = [
    "tkinter",
    "unittest",
    "email",
    "xml",
    "pydoc",
]

Including Data Files

[tool.xsetuper.build_exe]
include_files = [
    ("data/", "data/"),
    ("config.json", "config.json"),
]

Optimizing the Build

[tool.xsetuper.build_exe]
optimize = 2  # Maximum optimization (removes docstrings)
no_compress = false
zip_include_packages = ["encodings"]

Development

git clone https://github.com/ifekri/xsetuper.git
cd xsetuper
pip install -e ".[dev]"

Running Tests

pytest tests/ -v

Coverage

pytest tests/ --cov=xsetuper --cov-report=term-missing

License

MIT License. See LICENSE for details.

Download files

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

Source Distribution

xsetuper-1.0.0.tar.gz (1.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

xsetuper-1.0.0-py3-none-any.whl (3.8 kB view details)

Uploaded Python 3

File details

Details for the file xsetuper-1.0.0.tar.gz.

File metadata

  • Download URL: xsetuper-1.0.0.tar.gz
  • Upload date:
  • Size: 1.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for xsetuper-1.0.0.tar.gz
Algorithm Hash digest
SHA256 b615a4a93770d46b34af6f649623acf83e4c8014e7007887d8b17904a73fcef5
MD5 bd578c543a47a2945f334c5152dbabbd
BLAKE2b-256 58f693be8ec094b3ffc999a5891975fe4bc965910dc12acab13e44f0da78803a

See more details on using hashes here.

Provenance

The following attestation bundles were made for xsetuper-1.0.0.tar.gz:

Publisher: build-wheel.yml on ifekri/xsetuper

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xsetuper-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: xsetuper-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 3.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for xsetuper-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8bec493dddf7d8cd6cf054e3948dcd84b83bf5cef80c0ce9af0ecaa26ccd66ec
MD5 0ec9d407606f32e8571ffb87b16fecc0
BLAKE2b-256 d057a5d3440def1943a8bf260034ced1c70a10b63ab1c514e9c0f0f869d69283

See more details on using hashes here.

Provenance

The following attestation bundles were made for xsetuper-1.0.0-py3-none-any.whl:

Publisher: build-wheel.yml on ifekri/xsetuper

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page