A modern Python packaging tool to create distributable applications with built-in updating, inspired by uv. It solves many common drawbacks found in tools like PyInstaller and Nuitka.

- Lightweight Launcher: The GUI launcher is built in Rust and is only ~3MB zipped.
- Dynamic Setup: On first launch, the application clones your code from a Git repository, downloads an isolated Python environment, and installs dependencies using
pip. - Universal Compatibility: Supports all Python libraries without special configuration.
- Robust App Management: The GUI provides industry-level upgrading and downgrading backed by Git and
pip, with auto-generated update notes. - Blazing-Fast Updates: Typical incremental take about one second.
- Multiple Profiles: Define and allow users to switch between different application profiles (e.g., CPU vs. CUDA versions) with unique entry points and dependencies.
- CI/CD Integration: A dedicated GitHub Action can pre-build a full package with all dependencies included for offline distribution.
- Aniti-Virus Friendly: No large exe like pyinstaller which could cause the windows defender to delete, use the nsis setup packaging.
This method distributes the lightweight PyAppify launcher. The launcher will then download your application and its dependencies on the user's machine.
- Download the latest
pyappifyexecutable from the project's Releases page. - Modify the
pyappify.ymlfile according to your python project.
# pyappify.yml
name: "pyappify-sample" # English only
profiles:
- name: "release"
git_url: "https://github.com/ok-oldking/pyappify-action.git" # The repo url to clone. Must have tags for version management; semver is recommended.
main_script: "main.py" # If ending with .py, will use python venv to run. Otherwise, will search in the working dir and the venv's Script/bin path.
requires_python: "3.12" # Supports python 3.7 - 3.13.
requirements: "requirements.txt" # Supports a requirements.txt file or pyproject.toml like .[dev,docs].
pip_args: "--index-url https://mirrors.cloud.tencent.com/pypi/simple" # Optional pip arguments.
- name: "debug" # Optional Another profile.
main_script: "main_debug.py" # You can omit other properties; they will default to the values from the first profile.
pip_args: "-i https://mirrors.aliyun.com/pypi/simple" # Optional pip arguments.- You can test the launcher by double-clicking the pyappify.exe and install python with the GUI. You can then package the files for offline or online distribution.
- pyappify.yml (Required, You project config.)
- pyappify.exe (You can rename it to your app name.)
- data (python, venv, dependencies, git repo, include if you want the offline full package.)
- logs(pyappify logs and your console log, auto rotate, can be deleted.)
- cache(pip cache etc, can be deleted.)
This method uses the PyAppify GitHub Action to bundle the launcher, your code, and all dependencies into a single distributable zip file. This is ideal for users who need a fully offline installation.
- A
pyappify.ymlfile in the root of your repository, configured for your project. - (Optional) An
iconsdirectory in your repository root containingicon.icoandicon.pngfor custom application icons.
refer to the docs at https://github.com/ok-oldking/pyappify-action