05aa3846a0
Having behavior on your laptop diverge from behavior in the gate is confusing. Just use constraints on every devstack run to be consistent. Users of devstack can edit the requirements repo in order to change these constraints locally if necessary. Change-Id: I843208e2e982eb04931b76f5cb4bd219fbcd70de
108 lines
2.9 KiB
Bash
Executable File
108 lines
2.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# **install_pip.sh**
|
|
|
|
# install_pip.sh [--pip-version <version>] [--use-get-pip] [--force]
|
|
#
|
|
# Update pip and friends to a known common version
|
|
|
|
# Assumptions:
|
|
# - update pip to $INSTALL_PIP_VERSION
|
|
|
|
set -o errexit
|
|
set -o xtrace
|
|
|
|
# Keep track of the current directory
|
|
TOOLS_DIR=$(cd $(dirname "$0") && pwd)
|
|
TOP_DIR=`cd $TOOLS_DIR/..; pwd`
|
|
|
|
# Change dir to top of DevStack
|
|
cd $TOP_DIR
|
|
|
|
# Import common functions
|
|
source $TOP_DIR/stackrc
|
|
|
|
FILES=$TOP_DIR/files
|
|
|
|
PIP_GET_PIP_URL=https://bootstrap.pypa.io/get-pip.py
|
|
LOCAL_PIP="$FILES/$(basename $PIP_GET_PIP_URL)"
|
|
|
|
GetDistro
|
|
echo "Distro: $DISTRO"
|
|
|
|
function get_versions {
|
|
PIP=$(which pip 2>/dev/null || which pip-python 2>/dev/null || true)
|
|
if [[ -n $PIP ]]; then
|
|
PIP_VERSION=$($PIP --version | awk '{ print $2}')
|
|
echo "pip: $PIP_VERSION"
|
|
else
|
|
echo "pip: Not Installed"
|
|
fi
|
|
}
|
|
|
|
|
|
function install_get_pip {
|
|
# The OpenStack gate and others put a cached version of get-pip.py
|
|
# for this to find, explicitly to avoid download issues.
|
|
#
|
|
# However, if DevStack *did* download the file, we want to check
|
|
# for updates; people can leave their stacks around for a long
|
|
# time and in the mean-time pip might get upgraded.
|
|
#
|
|
# Thus we use curl's "-z" feature to always check the modified
|
|
# since and only download if a new version is out -- but only if
|
|
# it seems we downloaded the file originally.
|
|
if [[ ! -r $LOCAL_PIP || -r $LOCAL_PIP.downloaded ]]; then
|
|
curl --retry 6 --retry-delay 5 \
|
|
-z $LOCAL_PIP -o $LOCAL_PIP $PIP_GET_PIP_URL || \
|
|
die $LINENO "Download of get-pip.py failed"
|
|
touch $LOCAL_PIP.downloaded
|
|
fi
|
|
sudo -H -E python $LOCAL_PIP
|
|
}
|
|
|
|
|
|
function configure_pypi_alternative_url {
|
|
PIP_ROOT_FOLDER="$HOME/.pip"
|
|
PIP_CONFIG_FILE="$PIP_ROOT_FOLDER/pip.conf"
|
|
if [[ ! -d $PIP_ROOT_FOLDER ]]; then
|
|
echo "Creating $PIP_ROOT_FOLDER"
|
|
mkdir $PIP_ROOT_FOLDER
|
|
fi
|
|
if [[ ! -f $PIP_CONFIG_FILE ]]; then
|
|
echo "Creating $PIP_CONFIG_FILE"
|
|
touch $PIP_CONFIG_FILE
|
|
fi
|
|
if ! ini_has_option "$PIP_CONFIG_FILE" "global" "index-url"; then
|
|
# It means that the index-url does not exist
|
|
iniset "$PIP_CONFIG_FILE" "global" "index-url" "$PYPI_OVERRIDE"
|
|
fi
|
|
|
|
}
|
|
|
|
# Setuptools 8 implements PEP 440, and 8.0.4 adds a warning triggered any time
|
|
# pkg_resources inspects the list of installed Python packages if there are
|
|
# non-compliant version numbers in the egg-info (for example, from distro
|
|
# system packaged Python libraries). This is off by default after 8.2 but can
|
|
# be enabled by uncommenting the lines below.
|
|
#PYTHONWARNINGS=$PYTHONWARNINGS,always::RuntimeWarning:pkg_resources
|
|
#export PYTHONWARNINGS
|
|
|
|
# Show starting versions
|
|
get_versions
|
|
|
|
# Do pip
|
|
|
|
# Eradicate any and all system packages
|
|
uninstall_package python-pip
|
|
|
|
install_get_pip
|
|
|
|
if [[ -n $PYPI_ALTERNATIVE_URL ]]; then
|
|
configure_pypi_alternative_url
|
|
fi
|
|
|
|
pip_install -U setuptools
|
|
|
|
get_versions
|