blob: a242e1335b018b0db45bffcb006701e537885f82 [file] [log] [blame]
#!/usr/bin/env bash
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the spefic language governing permissions and
# limitations under the License.
#
# Python versions installer via pyenv.
#
set -euo pipefail
# Variable containing the python versions to install
python_versions_arr=("3.10.10" "3.11.4" "3.12.6" "3.13.9")
# Install pyenv dependencies.
pyenv_dep(){
sudo apt-get update -y
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
}
# Install pyenv, delete previous version if needed.
pyenv_install(){
if [[ -d "$HOME"/.pyenv/ ]]; then
sudo rm -r "$HOME"/.pyenv
fi
if [[ -e "$HOME"/pyenv_installer.sh ]]; then
sudo rm "$HOME"/pyenv_installer.sh
fi
curl https://pyenv.run > "$HOME"/pyenv_installer.sh
chmod +x "$HOME"/pyenv_installer.sh
"$HOME"/pyenv_installer.sh
}
# Setting pyenv in User environment, PATH.
pyenv_post_install(){
if ! < "$HOME"/.bashrc grep -q "# pyenv Config" ; then
{
echo '# pyenv Config'
echo 'export PYENV_ROOT="$HOME/.pyenv"'
echo 'export PATH="$PYENV_ROOT/bin:$PATH"'
echo 'if which pyenv > /dev/null; then'
echo ' eval "$(pyenv init -)"'
echo ' eval "$(pyenv init --path)"'
echo ' eval "$(pyenv virtualenv-init -)"'
echo 'fi'
} >> "$HOME"/.bashrc
fi
}
# Install python versions with pyenv
pyenv_versions_install(){
arr=("$@")
for version in "${arr[@]}"; do
"$HOME"/.pyenv/bin/pyenv install "$version"
done
}
# Setting python versions globally
python_versions_setglobally(){
"$HOME"/.pyenv/bin/pyenv global "$@"
}
# Remove pyenv script installer
clean(){
sudo rm "$HOME"/pyenv_installer.sh
echo -e "\nRestart your shell so the path changes take effect"
echo " 'exec $SHELL'"
}
# Install pyenv environment with python versions
python_installer(){
pyenv_dep
pyenv_install
pyenv_post_install
pyenv_versions_install "${python_versions_arr[@]}"
python_versions_setglobally "${python_versions_arr[@]}"
clean
}
python_installer