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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3macOS 11.0+ ARM64

ux_py-0.1.6-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.6.tar.gz.

File metadata

  • Download URL: ux_py-0.1.6.tar.gz
  • Upload date:
  • Size: 43.6 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.6.tar.gz
Algorithm Hash digest
SHA256 75ff4fb6d7b7b73a3a076fb8c50fa3a8f473d5888044106100208649aeee4ae0
MD5 04a25704e4593b16bbbba6f6eff788de
BLAKE2b-256 898521d6bc0e8b83faf18e7cae704cdede2852bcc707c46138a598a8a1ee3f72

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ux_py-0.1.6-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.6-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 61c08e4894dafd5d489c4b1f5f88e08c2f20da1843db08de5fd1c59a5e62ab6e
MD5 97f1b56582ac4c38fe8f2f00cc9653ab
BLAKE2b-256 9bab26148ccdd2433f0d7d65d7ba537d3c9038b91981dd3359ce687b46db51ea

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ux_py-0.1.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b6f4210533c544e34c4f23adf8e8a8bd9a47f86ed5993be69c508075f6d4be45
MD5 6ff2143e2508d9f3d02182d2f610faf0
BLAKE2b-256 ca2d7a851cbe06f9c336074352eac7db2276533382be7054a50aaaf9d70db7cc

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ux_py-0.1.6-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.6-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8600f95a4bdc03e29a1b2a03a86717309574ff4c899fc1cec307386487243dae
MD5 5488fac433a7340fec6bf0984e157617
BLAKE2b-256 11fa30660cc2abf0ac5905ab742941d8177c570133372489c32540eaec712ef0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ux_py-0.1.6-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a5c2a91dce92a9ad036ddfa85b32e6117f6ba99291be3986e3fd79bb1060fd0e
MD5 e09c95a39326b3e8a2477779a28bf1a9
BLAKE2b-256 ed8ba2e7ce12a1678e04fa967806ed1baf9f5969de0e8a2694c3e1d08efc07b9

See more details on using hashes here.

Provenance

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