Skip to main content

Turn a Python app into a Windows installer(msi)

Project description

pyappdist

Turn a Python app into a Windows installer — and it just works.

⚠️ Alpha. pyappdist is under active development. It works end-to-end today, but the config schema, CLI, and output layout may still change without notice.

pyappdist does not freeze your code. Instead of bundling Python and your app into a single executable (and fighting hidden imports, data files, and plugins along the way), it installs your app into a real, dedicated Python runtime — exactly the way pip would — and ships that.

Because the runtime is a normal Python environment, most apps run as-is: no hooks, no --hidden-import, no --add-data, no per-library workarounds. If it runs under uv run, it almost certainly runs after pyappdist build. C extensions, abi3 wheels, Qt plugins, and tkinter-based GUIs work unmodified because the install layout is real.

Quick start

Add a [tool.pyappdist] section to your app's pyproject.toml:

[tool.pyappdist]
name = "My App"
python = "3.12"
target = "windows-x86_64"

[[tool.pyappdist.launchers]]
name = "myapp"              # produces myapp.exe
entry = "myapp:main"        # module:callable

[tool.pyappdist.wix]
manufacturer = "Example Inc."

Then add pyappdist and build:

uv add --dev pyappdist
uv run pyappdist build .    # wheels -> runtime -> image -> launcher -> wix -> MSI

The result lands under appdist/dist/: a portable .zip and an .msi installer.

Documentation

Full documentation lives in the docs/ directory (Sphinx / Read the Docs):

Status

Alpha — the pipeline works end-to-end, but expect breaking changes to the config schema, CLI, and output layout as it matures.

Windows x64 is the current target. macOS/Linux packaging, auto-update, and code-signing certificates are out of scope for now. Distributed apps are not obfuscated, and unsigned installers will trigger a SmartScreen warning.

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

pyappdist-0.1.0.tar.gz (22.6 kB view details)

Uploaded Source

Built Distribution

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

pyappdist-0.1.0-py3-none-any.whl (32.2 kB view details)

Uploaded Python 3

File details

Details for the file pyappdist-0.1.0.tar.gz.

File metadata

  • Download URL: pyappdist-0.1.0.tar.gz
  • Upload date:
  • Size: 22.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for pyappdist-0.1.0.tar.gz
Algorithm Hash digest
SHA256 2c2471a461351259d77a6d24b2ea720f9d27035d887c48642aefb996b810f2a4
MD5 9b40bb659f9be3e8e66c109ef89be4ec
BLAKE2b-256 e933841cd2a272c3e14740bd8a6349bd57cb30537c4dd1e245f1c7ade1438c89

See more details on using hashes here.

File details

Details for the file pyappdist-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: pyappdist-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 32.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for pyappdist-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7d25963fee51e7e63c03833a1c8b24ce3a965d676d57117e54fe7894cc762dca
MD5 2e7347890b4bd448ac87de6c6d65fe7d
BLAKE2b-256 27a987ec5858e6fe5e0518e73418064e135de9429badabe985df9ef79f90af1e

See more details on using hashes here.

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