Skip to main content

uv-based Python App Launcher - distribute Python apps as single executables

Project description

ux

uv-based Python App Launcher - distribute Python apps as single executables.

Features

  • Single binary distribution - End users don't need Python or uv installed
  • Offline bundling - Embed Python interpreter and all dependencies; runs without internet access
  • Cross-compilation - Build for Linux/Windows from any platform
  • macOS .app bundle - Native macOS application with icon support
  • Code signing & Notarization - Distribute through macOS Gatekeeper
  • DMG creation - Professional macOS distribution format

Installation

Via uv (recommended)

uv tool install ux-py

Via pip

pip install ux-py

From GitHub Releases

Download from Releases

Build from source

cargo install --git https://github.com/i2y/ux

Quick Start

Basic bundling

# Bundle Python app into single binary
ux bundle --project /path/to/project --output ./dist/

Offline bundling

Bundle Python and all dependencies so the app runs without network access on the target machine:

# Embed Python interpreter and locked wheels (no internet required at runtime)
ux bundle --offline --project /path/to/project --output ./dist/

# Cross-compile an offline bundle for Linux
ux bundle --offline --target linux-x86_64 --output ./dist/

The Python interpreter is fetched from python-build-standalone for the target platform, so cross-platform offline bundles work from any host.

Cross-compilation

# Build for Linux (works from any platform)
ux bundle --target linux-x86_64 --output ./dist/

# Build for Windows (works from any platform)
ux bundle --target windows-x86_64 --output ./dist/

macOS .app bundle

# Create .app bundle
ux bundle --format app --output ./dist/

# With code signing
ux bundle --format app --codesign --output ./dist/

# With notarization (requires Apple Developer account)
ux bundle --format app --notarize --output ./dist/

# Create DMG for distribution
ux bundle --format app --codesign --dmg --output ./dist/

Configuration

Add [tool.ux] section to your pyproject.toml:

[project]
name = "myapp"

[project.scripts]
myapp = "myapp.main:main"  # Entry point

[tool.ux]
entry = "myapp"            # Optional: explicit entry point
include = [                # Optional: additional files to include
  "assets/",               # Include entire directory (trailing slash)
  "config.yaml",           # Include specific file
]

[tool.ux.macos]
icon = "assets/icon.png"   # PNG auto-converted to ICNS
bundle_identifier = "com.example.myapp"
bundle_name = "My App"

Included files

The bundle automatically includes:

  • Package directory (detected from [project].name, e.g., myapp/ or src/myapp/)
  • pyproject.toml, uv.lock
  • README.md, LICENSE (if present)

Use [tool.ux].include to add extra files or directories (with trailing slash)

Supported Platforms

ux runs on macOS, Linux, and Windows. You can bundle apps for any supported target from any platform.

Target Bundle PyPI
darwin-x86_64
darwin-aarch64
linux-x86_64
linux-aarch64 No*
windows-x86_64

* Linux aarch64 is available from GitHub Releases only.

Real-world Usage

  • bkstg - A serverless desktop Internal Developer Portal built with Castella

License

MIT

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

ux_py-0.1.5.tar.gz (43.4 kB view details)

Uploaded Source

Built Distributions

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

ux_py-0.1.5-py3-none-win_amd64.whl (2.7 MB view details)

Uploaded Python 3Windows x86-64

ux_py-0.1.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

ux_py-0.1.5-py3-none-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

ux_py-0.1.5-py3-none-macosx_10_12_x86_64.whl (2.7 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file ux_py-0.1.5.tar.gz.

File metadata

  • Download URL: ux_py-0.1.5.tar.gz
  • Upload date:
  • Size: 43.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ux_py-0.1.5.tar.gz
Algorithm Hash digest
SHA256 4c68f7a9371ebbeef69b7faf28ff26a45c38d3a4c3692ed62f4561abc7513ac4
MD5 f00b0a126b7eac5b7074d2f0ec89cf91
BLAKE2b-256 1320e905b04da20173c5f541ac298f3799d1c74a50c446cfc03ffecc84775f15

See more details on using hashes here.

Provenance

The following attestation bundles were made for ux_py-0.1.5.tar.gz:

Publisher: release.yml on i2y/ux

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

File details

Details for the file ux_py-0.1.5-py3-none-win_amd64.whl.

File metadata

  • Download URL: ux_py-0.1.5-py3-none-win_amd64.whl
  • Upload date:
  • Size: 2.7 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ux_py-0.1.5-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 12b8320e2b1468e03ef8fa8c6d49328250124b29b7aa6c62293221d46fc50176
MD5 e4acbb4ca75e270981e650c3c029a768
BLAKE2b-256 1169b8477d644c6b888af4725e17351b1ef0c7e4bf28660df04562d71d58bff5

See more details on using hashes here.

Provenance

The following attestation bundles were made for ux_py-0.1.5-py3-none-win_amd64.whl:

Publisher: release.yml on i2y/ux

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

File details

Details for the file ux_py-0.1.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ux_py-0.1.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 28196e14c62385068656b7a1f031f46c578159689b6814e8fafb6b9a70bcd00a
MD5 4e4ee39cce3dd0ae2fb9aa7385325736
BLAKE2b-256 1b3732acf4c80d0677fb3a4e7b2aaed40cb5f43015d34110d5315c0fde8e31a3

See more details on using hashes here.

Provenance

The following attestation bundles were made for ux_py-0.1.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on i2y/ux

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

File details

Details for the file ux_py-0.1.5-py3-none-macosx_11_0_arm64.whl.

File metadata

  • Download URL: ux_py-0.1.5-py3-none-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: Python 3, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ux_py-0.1.5-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f3e10a7168fdaa53294fe008c46e1829c3255f63d0ca7875404d8b78105c0486
MD5 82d06a4d8facf9f2c844b8a29da2ce8c
BLAKE2b-256 ff6b87c95cfa8703cd2645a6b945308079e72338cd15775001078153c9dd715f

See more details on using hashes here.

Provenance

The following attestation bundles were made for ux_py-0.1.5-py3-none-macosx_11_0_arm64.whl:

Publisher: release.yml on i2y/ux

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

File details

Details for the file ux_py-0.1.5-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for ux_py-0.1.5-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 556e9b13f7edb69356131790f33efed275835165fba288520d2a014b6ea19d2c
MD5 d5a4aa88ab964fb89df08644ca3b7d05
BLAKE2b-256 84930b32eba75ad28ef95bd6a9f1c2f9a91b476e33da9cdf83dd62c9aa9855bf

See more details on using hashes here.

Provenance

The following attestation bundles were made for ux_py-0.1.5-py3-none-macosx_10_12_x86_64.whl:

Publisher: release.yml on i2y/ux

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 Pingdom Monitoring Sentry Error logging StatusPage Status page