| | #!/bin/bash |
| |
|
| | PackageDir=${1:-"."} |
| | OutputDir=${2:-""} |
| | VirtualEnvDir=${3:-""} |
| | PythonVersion=${4:-""} |
| | PipVersion=${5:-""} |
| |
|
| | if [ -z "$OutputDir" ]; then |
| | echo "Usage: $0 PackageDir OutputDir VirtualEnvDir PythonVersion[3.7|3.8|3.9|3.10] PipVersionUpdate[version|false]" |
| | exit 1 |
| | fi |
| |
|
| | if [ -n "$PythonVersion" ]; then |
| | if [[ ! "$PythonVersion" =~ ^3\.(7|8|9|10)$ ]]; then |
| | echo "Error: PythonVersion must be one of 3.7, 3.8, 3.9, or 3.10" |
| | exit 1 |
| | fi |
| | fi |
| |
|
| | if [ -d "$OutputDir" ]; then |
| | cd "$OutputDir" |
| | OutputDir="$(pwd -P)" |
| | else |
| | cd "$(dirname "$OutputDir")" |
| | OutputDir="$(pwd -P)/$(basename "$OutputDir")" |
| | fi |
| | cd - |
| |
|
| | if [ -d "$PackageDir" ]; then |
| | cd "$PackageDir" |
| | PackageDir="$(pwd -P)" |
| | else |
| | cd "$(dirname "$PackageDir")" |
| | PackageDir="$(pwd -P)/$(basename "$PackageDir")" |
| | fi |
| | PackageName=`basename "$PackageDir"` |
| |
|
| | echo Packaging contents of $PackageName from $PackageDir and writing to $OutputDir |
| |
|
| | |
| | if [ -n "$VirtualEnvDir" ]; then |
| | |
| | if [ ! -d "$VirtualEnvDir" ]; then |
| | echo "Creating new virtual environment with python$PythonVersion" |
| | python"${PythonVersion}" -m venv "$VirtualEnvDir" || { echo "Failed to create virtual environment"; exit 1; } |
| | "$VirtualEnvDir/bin/python" -m pip install --upgrade pip || { echo "Failed to update pip"; exit 1; } |
| | fi |
| |
|
| | |
| | if [ "$PipVersion" != "false" ]; then |
| | if [ -n "$PipVersion" ]; then |
| | "$VirtualEnvDir/bin/python" -m pip install --upgrade pip==$PipVersion || { echo "Failed to update pip"; exit 1; } |
| | else |
| | "$VirtualEnvDir/bin/python" -m pip install --upgrade pip || { echo "Failed to update pip"; exit 1; } |
| | fi |
| | fi |
| |
|
| | |
| | VirtualEnvDir=${VirtualEnvDir%/} |
| | "$VirtualEnvDir/bin/python" -m pip install -r requirements.txt || { echo "Failed to install requirements"; exit 1; } |
| |
|
| | |
| | cp ${PackageName} __main__.py |
| | |
| | VersionString=$($VirtualEnvDir/bin/python ./${PackageName} --version 2>&1 >/dev/null) |
| | echo 'def Get(): return "'$VersionString'"' > version.py |
| | |
| | find . | egrep "\.(py|PY|yaml)$" | zip -@ "$OutputDir/$PackageName.zip" |
| | cat <(echo "#!/usr/bin/env $VirtualEnvDir/bin/python") "$OutputDir/$PackageName.zip" > "$OutputDir/$PackageName" |
| | else |
| | |
| | cp ${PackageName} __main__.py |
| | |
| | VersionString=$(/usr/local/bin/python ./${PackageName} --version 2>&1 >/dev/null) |
| | echo 'def Get(): return "'$VersionString'"' > version.py |
| | |
| | find . | egrep "\.(py|PY|yaml)$" | zip -@ "$OutputDir/$PackageName.zip" |
| | cat <(echo "#!/usr/bin/env /usr/local/bin/python") "$OutputDir/$PackageName.zip" > "$OutputDir/$PackageName" |
| | fi |
| |
|
| | chmod 777 "$OutputDir/$PackageName" |
| |
|
| | rm "$OutputDir/$PackageName.zip" |
| | rm __main__.py |
| |
|