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.
- 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.pyto freeze -
pyproject.tomlconfiguration support - GUI and console application support
- MSI, DMG, AppImage, DEB, RPM installer generation
- Automatic dependency detection
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/projectThe GUI provides:
-
Project manager — save/load projects (
.xsetuper.json) and exportpyproject.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
pip install xsetuperOr with conda:
conda install -c conda-forge xsetuperThe simplest way to freeze your Python application:
xsetuper --script myapp.pyThis creates a standalone executable in build/exe.<platform>-<python-version>/.
# 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=2Add 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_exefrom 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",
)
],
)xsetuper bdist_msixsetuper bdist_dmgxsetuper bdist_appimagexsetuper bdist_deb[tool.xsetuper.build_exe]
excludes = [
"tkinter",
"unittest",
"email",
"xml",
"pydoc",
][tool.xsetuper.build_exe]
include_files = [
("data/", "data/"),
("config.json", "config.json"),
][tool.xsetuper.build_exe]
optimize = 2 # Maximum optimization (removes docstrings)
no_compress = false
zip_include_packages = ["encodings"]git clone https://github.com/ifekri/xsetuper.git
cd xsetuper
pip install -e ".[dev]"pytest tests/ -vpytest tests/ --cov=xsetuper --cov-report=term-missingMIT License. See LICENSE for details.