vfx-9 / python_core /package.sh
TaqiRaza512's picture
Initial commit
a103028
#!/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 - # Go back to previous directory
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
# Check if VirtualEnvDir is defined
if [ -n "$VirtualEnvDir" ]; then
# check if env doesn't exist
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
# update pip if required
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
# remove trailing slash
VirtualEnvDir=${VirtualEnvDir%/}
"$VirtualEnvDir/bin/python" -m pip install -r requirements.txt || { echo "Failed to install requirements"; exit 1; }
# Build in virtual env
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
# Build in main env
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