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.4.tar.gz (42.3 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.4-py3-none-win_amd64.whl (2.7 MB view details)

Uploaded Python 3Windows x86-64

ux_py-0.1.4-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.4-py3-none-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

ux_py-0.1.4-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.4.tar.gz.

File metadata

  • Download URL: ux_py-0.1.4.tar.gz
  • Upload date:
  • Size: 42.3 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.4.tar.gz
Algorithm Hash digest
SHA256 c2ce203459c0e4271c4aa10d78ea879ef02d719a4f45963592c3c951cbfb0630
MD5 ea2c8eaa615c98e709a132e0f4749335
BLAKE2b-256 482ac81679f7ee444d96e649e45e2a3d0f35a5ef60042264823764084cc8e86d

See more details on using hashes here.

Provenance

The following attestation bundles were made for ux_py-0.1.4.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.4-py3-none-win_amd64.whl.

File metadata

  • Download URL: ux_py-0.1.4-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.4-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 90ecd40a81068d1435e40086f49c1d19da6497e49794640deb0ba290c5fa8dcd
MD5 08bebd5a8074e3f1fac3b82bcf15a3ae
BLAKE2b-256 26604e55c30d0fe252558810368796f8162b4f6cf8e6e166bde7a54da070e4b3

See more details on using hashes here.

Provenance

The following attestation bundles were made for ux_py-0.1.4-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.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ux_py-0.1.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ea51f0f955c523e516606d4f84d92f9a37d2de7072b824663eb3c6b356d49dd7
MD5 3836791dd2c436f83ac6b06c57f2c065
BLAKE2b-256 fcb6ff1d4cb09123dcf2c749238b7ba1b1f52c7dc0cfe543e293c7c353949985

See more details on using hashes here.

Provenance

The following attestation bundles were made for ux_py-0.1.4-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.4-py3-none-macosx_11_0_arm64.whl.

File metadata

  • Download URL: ux_py-0.1.4-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.4-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 aa4a28af349f095d1c49c648f89654b8bf64a301d6c4fa8b44bc030379522c49
MD5 1ab20e4de0e90a2e8b899cfb96ae35f9
BLAKE2b-256 f8757587adefc1f5a93f947058b84b62d42ea12d55bb19914414918ddc160dfb

See more details on using hashes here.

Provenance

The following attestation bundles were made for ux_py-0.1.4-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.4-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for ux_py-0.1.4-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 707be03460ab8ce54ccacbccee1d7d3571656ea0f3d179e3f4cfc60e13c9fd32
MD5 98a84622bcff06cf0cf768dd0c8dcb51
BLAKE2b-256 71d37f5c43ce4a5021763d0e2a874a8f9d19ef2cd7445aec54ac04f3ebe29062

See more details on using hashes here.

Provenance

The following attestation bundles were made for ux_py-0.1.4-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