Pyinstaller
Customisable GitHub Action to package python scripts into executables for different OS's
Install / Use
/learn @sayyid5416/PyinstallerREADME
Check all available usable tags here
<br>
You can also use any major tags like @v1 for any @v1.*.*
🔰 PyInstaller
- This action packages the python source code into executables using pyinstaller.
- Use this action in your workflow to create & upload executables to GitHub (as artifacts).
- Use inputs to configure this action.
- Use outputs to get information from this action.
🔰 Features
💠 Multi-OS support
- Create executable for different kinds of os like linux, windows, mac etc.
- Specify OS in
jobs.<job-id>.runs-on=<your-os-name>in your workflow file. - see examples for more info.
💠 .py and .spec support
- You can use either
.pyor.specfile to create the executable. - Specify it in
inputs.spec: <file.py/file.spec>. - When
.pyfile is used, generated.specfile will also be uploaded as artifact. - Modify your
.specfile according to your needs.
💠 Third party modules
- Write your third party modules in a file (Ex:
requirements.txt) , and - Use
inputs.requirements: <path-to-your-requirement-file>.
💠 Pyinstaller options
- Specify pyinstaller options in
inputs.options: <comma-seperated-options-here>. .pyand.specboth supports different kind of options.- Check list of all supported options here.
💠 Python and Pyinstaller versions
- You can specify any python version for the executable.
- Specify specific python-version in
inputs.python_ver: <python-version-here>. - Specify specific pyinstaller-version in
inputs.pyinstaller_ver: <pyinstaller-version-here-with-proper-signs, like '==5.13.2'>.
💠 Executable uploads
- You can control if generated executable needs to be uploaded as artifact.
- You can choose a name of your liking.
- You can also customise the level of compression for the archive.
- Specify the artifact name in
inputs.upload_exe_with_name: <name-here>.
🔰 Inputs & Outputs
- Some inputs are required, while rest are optional.
- Check detailed info about these inputs & outputs here.
💠 Available Inputs
| Input | Default <br> (- = empty string) | Description
|-----------------------|:--------:|-------------
| spec (required) | - | Path of your .py or .spec file
| requirements | - | Path of your requirements.txt file
| options | - | Options to set for pyinstaller command
| spec_options | - | Custom parameters for the spec file
| python_ver | 3.10 | Specific python version you want to use
| python_arch | x64 | Specific python architecture you want to use
| pyinstaller_ver | - | Specific pyinstaller version you want to use <br>(with proper signs, like ==5.13.2)
| exe_path | ./dist | Path on runner-os, where executable will be stored
| upload_exe_with_name| - | Upload exe_ artifact with this name. Else, it won't upload
| clean_checkout | true | If true, perform a clean checkout; if false, skip cleaning. Cleaning will remove all existing local files not in the repository during checkout. If you use utilities like pyinstaller-versionfile, set this to false.
| lfs | false | Whether to download Git-LFS files (passed to lfs option in actions/checkout step)
| compression_level | 6 | Level of compression for archive. <br>Range: 0 and 9. <br>(0 = No compression, 9 = Max compression).
💠 Available Outputs
| Output | Description
|-----------------------|-------------
| executable_path | Path on runner-os, where executable will be stored
| is_uploaded | true, if packaged executable has been uploaded as artifact
💠 Supported Pyinstaller options
| For .py | For .py | For .spec
|-----------------------------------------|-----------------------------------------|------------
| --uac-admin | --name <NAME>, -n <NAME> | --ascii, -a
| --uac-uiaccess | --icon <FILEICON>, -i <FILEICON> | --upx-dir <UPX_DIR>
| --noupx | --key <KEY> |
| --onedir, -D | --upx-dir <UPX_DIR> |
| --onefile, -F | --upx-exclude <FILE> |
| --ascii, -a | --add-data <SRC;DEST or SRC:DEST> |
| --console, --nowindowed, -c | --add-binary <SRC;DEST or SRC:DEST> |
| --windowed, --noconsole, -w | --collect-data <MODULENAME> |
| | --collect-all <MODULENAME> |
| | --version-file <FILE> |
🔰 Examples
jobs:
pyinstaller-build:
runs-on: #<windows-latest / ubuntu-latest / ..... etc>
steps:
- name: Create Executable
uses: sayyid5416/pyinstaller@v1
with:
python_ver: '3.6'
pyinstaller_ver: '==5.13.2'
spec: 'src/build.spec'
requirements: 'src/requirements.txt'
upload_exe_with_name: 'My executable'
options: --onefile, --name "My App", --windowed
spec_options: # any custom arguments you want like: `--debug`
<br>
<br>
<br>
🔰 Main Repository : sayyid5416/pyinstaller
Related Skills
node-connect
342.5kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
claude-opus-4-5-migration
85.3kMigrate prompts and code from Claude Sonnet 4.0, Sonnet 4.5, or Opus 4.1 to Opus 4.5
frontend-design
85.3kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
model-usage
342.5kUse CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.
