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/orsrc/myapp/) pyproject.toml,uv.lockREADME.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
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
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c2ce203459c0e4271c4aa10d78ea879ef02d719a4f45963592c3c951cbfb0630
|
|
| MD5 |
ea2c8eaa615c98e709a132e0f4749335
|
|
| BLAKE2b-256 |
482ac81679f7ee444d96e649e45e2a3d0f35a5ef60042264823764084cc8e86d
|
Provenance
The following attestation bundles were made for ux_py-0.1.4.tar.gz:
Publisher:
release.yml on i2y/ux
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ux_py-0.1.4.tar.gz -
Subject digest:
c2ce203459c0e4271c4aa10d78ea879ef02d719a4f45963592c3c951cbfb0630 - Sigstore transparency entry: 1004664632
- Sigstore integration time:
-
Permalink:
i2y/ux@ee5f986e80058da67fdd6701bf5efc3b47f98352 -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/i2y
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ee5f986e80058da67fdd6701bf5efc3b47f98352 -
Trigger Event:
push
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90ecd40a81068d1435e40086f49c1d19da6497e49794640deb0ba290c5fa8dcd
|
|
| MD5 |
08bebd5a8074e3f1fac3b82bcf15a3ae
|
|
| BLAKE2b-256 |
26604e55c30d0fe252558810368796f8162b4f6cf8e6e166bde7a54da070e4b3
|
Provenance
The following attestation bundles were made for ux_py-0.1.4-py3-none-win_amd64.whl:
Publisher:
release.yml on i2y/ux
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ux_py-0.1.4-py3-none-win_amd64.whl -
Subject digest:
90ecd40a81068d1435e40086f49c1d19da6497e49794640deb0ba290c5fa8dcd - Sigstore transparency entry: 1004664644
- Sigstore integration time:
-
Permalink:
i2y/ux@ee5f986e80058da67fdd6701bf5efc3b47f98352 -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/i2y
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ee5f986e80058da67fdd6701bf5efc3b47f98352 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ux_py-0.1.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: ux_py-0.1.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 2.8 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea51f0f955c523e516606d4f84d92f9a37d2de7072b824663eb3c6b356d49dd7
|
|
| MD5 |
3836791dd2c436f83ac6b06c57f2c065
|
|
| BLAKE2b-256 |
fcb6ff1d4cb09123dcf2c749238b7ba1b1f52c7dc0cfe543e293c7c353949985
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ux_py-0.1.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
ea51f0f955c523e516606d4f84d92f9a37d2de7072b824663eb3c6b356d49dd7 - Sigstore transparency entry: 1004664642
- Sigstore integration time:
-
Permalink:
i2y/ux@ee5f986e80058da67fdd6701bf5efc3b47f98352 -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/i2y
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ee5f986e80058da67fdd6701bf5efc3b47f98352 -
Trigger Event:
push
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa4a28af349f095d1c49c648f89654b8bf64a301d6c4fa8b44bc030379522c49
|
|
| MD5 |
1ab20e4de0e90a2e8b899cfb96ae35f9
|
|
| BLAKE2b-256 |
f8757587adefc1f5a93f947058b84b62d42ea12d55bb19914414918ddc160dfb
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ux_py-0.1.4-py3-none-macosx_11_0_arm64.whl -
Subject digest:
aa4a28af349f095d1c49c648f89654b8bf64a301d6c4fa8b44bc030379522c49 - Sigstore transparency entry: 1004664643
- Sigstore integration time:
-
Permalink:
i2y/ux@ee5f986e80058da67fdd6701bf5efc3b47f98352 -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/i2y
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ee5f986e80058da67fdd6701bf5efc3b47f98352 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ux_py-0.1.4-py3-none-macosx_10_12_x86_64.whl.
File metadata
- Download URL: ux_py-0.1.4-py3-none-macosx_10_12_x86_64.whl
- Upload date:
- Size: 2.7 MB
- Tags: Python 3, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
707be03460ab8ce54ccacbccee1d7d3571656ea0f3d179e3f4cfc60e13c9fd32
|
|
| MD5 |
98a84622bcff06cf0cf768dd0c8dcb51
|
|
| BLAKE2b-256 |
71d37f5c43ce4a5021763d0e2a874a8f9d19ef2cd7445aec54ac04f3ebe29062
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ux_py-0.1.4-py3-none-macosx_10_12_x86_64.whl -
Subject digest:
707be03460ab8ce54ccacbccee1d7d3571656ea0f3d179e3f4cfc60e13c9fd32 - Sigstore transparency entry: 1004664638
- Sigstore integration time:
-
Permalink:
i2y/ux@ee5f986e80058da67fdd6701bf5efc3b47f98352 -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/i2y
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ee5f986e80058da67fdd6701bf5efc3b47f98352 -
Trigger Event:
push
-
Statement type: