File size: 2,902 Bytes
a103028
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/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