-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpy-install-version
executable file
·57 lines (42 loc) · 1.61 KB
/
py-install-version
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
#!/bin/bash
# Install a version of Python (in `$HOME/opt`).
# Usage: py-install-version PY_VERSION [--force]
# Opalstack doc: https://community.opalstack.com/d/204-howto-install-a-newer-or-older-version-of-python
. `dirname ${BASH_SOURCE[0]}`/_py-utils
# Validate script arguments.
if [ $# -lt 1 ]; then
echo -e "\e[1;37mUsage:\e[0m \e[33m`basename ${BASH_SOURCE[0]}` PY_VERSION [--force]\e[0m"
exit 1
fi
# Initialization.
PY_VERSION=$1
[[ "$*" =~ "--force" ]] && FORCE=true || FORCE=false
# Check if already available.
if pyVersionExists $PY_VERSION && [ $FORCE = false ]; then
py_exec=`pyWhichExec $PY_VERSION`
py_real_version=`pyRealVersion $py_exec`
echo "Python $py_real_version is already available ($py_exec)."
[ "$py_real_version" = "$PY_VERSION" ] || echo "Use '--force' to install it anyway."
exit 1
fi
mkdir -p $HOME/tmp $LOCAL_PYTHON_DIR/bin
export TMPDIR=$HOME/tmp
# Install version.
cd $TMPDIR
echo -e "\e[1;37mDownloading sources…\e[0m"
wget -nv https://www.python.org/ftp/python/$PY_VERSION/Python-$PY_VERSION.tgz
[ $? = 0 ] || { echo -e "\e[31mERROR: Downloading sources failed.\e[0m"; exit 1; }
tar zxf Python-$PY_VERSION.tgz
cd Python-$PY_VERSION
echo -e "\n\e[1;37mInstalling Python $PY_VERSION…\e[0m"
./configure --prefix=$LOCAL_PYTHON_DIR
make
make install
cd ..
echo -e "\n\e[1;37mDeleting sources…\e[0m"
rm -rf Python-${PY_VERSION}*
# Execution report.
py_exec=`pyWhichExec $PY_VERSION`
[ -z "$py_exec" ] && { echo -e "\e[31mERROR: Python $PY_VERSION executable not found.\e[0m"; exit 1; }
echo -e "\n\e[32mSuccessfully installed Python `pyRealVersion $py_exec` ($py_exec).\e[0m"
echo