Skip to content

Customisable GitHub Action to package python scripts into executables for different OS's

License

Notifications You must be signed in to change notification settings

sayyid5416/pyinstaller

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

62 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Check all available usable tags here
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 .py or .spec file to create the executable.
  • Specify it in inputs.spec: <file.py/file.spec>.
  • When .py file is used, generated .spec file will also be uploaded as artifact.
  • Modify your .spec file 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>.
  • .py and .spec both 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
(- = 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
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
(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.
Range: 0 and 9.
(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>



🔰 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, 



🔰 Main Repository : sayyid5416/pyinstaller