|
|
#!/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 |
|
|
|