/
venv.bash
executable file
·153 lines (123 loc) · 3.72 KB
/
venv.bash
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#!/bin/bash
PROJECT=groot_rocker
SRC_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
VENV_DIR=${SRC_DIR}/.venv
##############################################################################
# Colours
##############################################################################
BOLD="\e[1m"
CYAN="\e[36m"
GREEN="\e[32m"
RED="\e[31m"
YELLOW="\e[33m"
RESET="\e[0m"
padded_message ()
{
line="........................................"
printf "%s %s${2}\n" ${1} "${line:${#1}}"
}
pretty_header ()
{
echo -e "${BOLD}${1}${RESET}"
}
pretty_print ()
{
echo -e "${GREEN}${1}${RESET}"
}
pretty_warning ()
{
echo -e "${YELLOW}${1}${RESET}"
}
pretty_error ()
{
echo -e "${RED}${1}${RESET}"
}
##############################################################################
# Methods
##############################################################################
install_package ()
{
PACKAGE_NAME=$1
dpkg -s ${PACKAGE_NAME} > /dev/null
if [ $? -ne 0 ]; then
sudo apt-get -q -y install ${PACKAGE_NAME} > /dev/null
else
pretty_print " $(padded_message ${PACKAGE_NAME} "found")"
return 0
fi
if [ $? -ne 0 ]; then
pretty_error " $(padded_message ${PACKAGE_NAME} "failed")"
return 1
fi
pretty_warning " $(padded_message ${PACKAGE_NAME} "installed")"
return 0
}
##############################################################################
install_nvidia_docker2 ()
{
PACKAGE_NAME=nvidia-docker2
dpkg-query -W -f='${Status}' ${PACKAGE_NAME} | grep -q -P '^install ok installed$'
if [ $? -ne 0 ]; then
HOST_DISTRIBUTION=$(. /etc/os-release; echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/${HOST_DISTRIBUTION}/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get -q -y install ${PACKAGE_NAME} > /dev/null
if [ $? -ne 0 ]; then
pretty_error " $(padded_message ${PACKAGE_NAME} "failed")"
return 1
fi
# sudo pkill -SIGHUP dockerd
# sudo service docker restart
sudo systemctl restart docker
pretty_warning " $(padded_message ${PACKAGE_NAME} "installed")"
else
pretty_print " $(padded_message ${PACKAGE_NAME} "found")"
return 0
fi
return 0
}
##############################################################################
#############################
# Checks
#############################
[[ "${BASH_SOURCE[0]}" != "${0}" ]] && SOURCED=1
if [ -z "$SOURCED" ]; then
pretty_error "This script needs to be sourced, i.e. source './setup.bash', not './setup.bash'"
exit 1
fi
#############################
# System Dependencies
#############################
pretty_header "System Dependencies"
install_package python3-dev || return
install_package python3-venv || return
install_package docker.io || exit 1
install_nvidia_docker2 || exit 1
#############################
# Virtual Env
#############################
pretty_header "Virtual Environment"
if [ -x ${VENV_DIR}/bin/pip3 ]; then
pretty_print " $(padded_message "virtual_environment" "found [${VENV_DIR}]")"
else
python3 -m venv ${VENV_DIR}
pretty_warning " $(padded_message "virtual_environment" "created [${VENV_DIR}]")"
fi
source ${VENV_DIR}/bin/activate
#############################
# Pypi Dependencies
#############################
pretty_header "PyPi Dependencies"
# upgrade pip3
python3 -m pip install -U pip
# build environment depedencies
pip3 install wheel
pip3 install "setuptools==45.2"
pip3 install -e .[tests]
pip3 install -e .[packaging]
# Useful if you want to build groot_rocker in tandem
# pip install -e /path/to/groot_rocker_workspace
# NB: this automagically nabs install_requires
python3 setup.py develop