GitHub Action
Build executables or extension modules from Python projects
This is a GitHub Action that builds stand-alone Windows, Mac, and Linux executable binaries from a python script using the amazing nuitka python compiler.
See Usage Details below for more info.
## hello_world.py
print("hello world!")
Run it in python
C:\> python hello_world.py
hello world!
Use this action as a step in one of your project's CI workflow jobs (details below):
# Build python script into a stand-alone exe
- uses: jimkring/[email protected]
with:
script-name: hello_world.py
C:\> hello_world.exe
hello world!
- Build an executable binary from your python script (stand-alone binaries or binary modules that can be called by python)
- Support for Windows, Mac (including .app bundles), and Linux
- Generally speaking, all the features of Nuitka
- Not all Nuitka options are currently exposed as input parameters to this action.
- The version of the Nuitka package (and its dependencies) are currently hard-coded. Eventually, we'll add support for you to specify versions of these packages -- probably just by disabling installing these packages as part of the action so you can do it in your workflow.
- Not many examples yet that demonstrate how to use this action in practice.
See action.yml for details on how this action works under the hood.
See jimkring/test-nuitka-action/ for examples of this workflow in action.
jobs:
build:
# Windows is currently the only platform this action supports
runs-on: windows-latest
steps:
# Check-out repository
- uses: actions/checkout@v3
# Setup Python
- uses: actions/setup-python@v4
with:
python-version: '3.x' # Version range or exact version of a Python version to use, using SemVer's version range syntax
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
# Build python script into a stand-alone exe
- uses: jimkring/[email protected]
with:
script-name: hello_world.py
# Uploads artifact
- name: Upload Artifact
uses: actions/upload-artifact@v3
with:
name: exe
path: build/hello_world.exe
This action installs the following python packages (which are specified in the requirements.txt of this action repo).
nuitka==0.9.4
# via -r requirements.in
ordered-set==4.1.0
# via -r requirements.in
wheel==0.37.1
# via -r requirements.in
zstandard==0.18.0
# via -r requirements.in
See Nuitka for full documentation on Nuitka. It's really a fantastic tool!
The scripts and documentation in this project are released under the MIT License.
Nuitka is licensed under the Apache 2.0 License
Python is licensed under the Python Software Foundation (PSF) License.
This tool compiles and/or copies your project's package dependencies (and their dependencies) into the output executable, which will be considered a combined and/or derivative work of those packages.
Important: You are responsibile for compliance with the licenses of your project's package dependencies. Please consult with an attorney about your individual/project's compliance needs and strategy.
There are some great license checker tools that you might consider integrating with your project. Generally speaking, they enable you to specify which licenses (or types) are approved or disaproved and alert you whenever your project has a package dependency that is not approved.
Here are a couple license checker tools:
- python-license-check - can be run as a GitHub pre-commit hook.
- dependencies-license-compliance-checker - a github action that can be run before your executable build.