#!/usr/bin/env bash # vim:ts=4:sts=4:sw=4:et # # Author: Hari Sekhon # Date: 2019-10-10 16:01:58 +0100 (Thu, 10 Oct 2019) # # https://github.com/HariSekhon/DevOps-Bash-tools # # License: see accompanying Hari Sekhon LICENSE file # # If you're using my code you're welcome to connect with me on LinkedIn and optionally send me feedback to help improve or steer this or other code I publish # # https://www.linkedin.com/in/HariSekhon # # Creates PyInstaller self-contained bundles of all python files given as args or all python files in the current and first subdirectory (to avoid creating bundles of libraries) set -u [ -n "${DEBUG:-}" ] && set -x srcdir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # shellcheck source=lib/utils.sh . "$srcdir/lib/utils.sh" filelist="$(find "${1:-.}" -maxdepth 2 -type f -iname '*.py')" if [ -z "$filelist" ]; then echo "no Python" echo echo "usage: ${0##*/} " echo return 0 &>/dev/null || : exit 0 fi section "Compiling and bundling Python code using PyInstaller" start_time="$(start_timer)" opts=(${PYINSTALL_OPTS:+"$PYINSTALLER_OPTS"}) opts+=(-y) if [ -d pylib ]; then opts+=(--paths pylib) if [ -d pylib/resources ]; then for filename in pylib/resources/*; do opts+=(--add-data "$filename:resources") done fi fi for filename in $filelist; do type isExcluded &>/dev/null && isExcluded "$filename" && continue echo "compiling $filename => dist/$filename" # want opt expansion # shellcheck disable=SC2086 pyinstaller ${opts:+"${opts[@]}"} "$filename" echo done time_taken "$start_time" section2 "Finished PyInstaller compilation" echo