- local pkg_list="git-review jenkins-job-builder lftools[openstack] "
- pkg_list+="python-heatclient python-openstackclient "
- pkg_list+="setuptools testresources tox yq"
- $python -m venv $venv > $pip_log
- $venv/bin/pip install --upgrade pip > $pip_log || return 1
- # Redirect errors for now
- $venv/bin/pip install --upgrade $pkg_list >> $pip_log 2> /dev/null || return 1
- # Generate list of packages
- pkg_list=$($venv/bin/pip freeze | awk -F '=' '{print $1}') || return 1
- # Update all packages, usuaally need to run twice to get all versions
- # correct.
- local upgrade_cmd="$venv/bin/pip install --upgrade $pkg_list"
- if $upgrade_cmd >> $pip_log 2>&1 > /dev/null ; then
- echo -n "Running 'pip --upgrade' to validate..."
- $upgrade_cmd >> $pip_log || return 1
- echo "..OK"
+ local pkg_list=""
+ # Use pyenv for selecting the python version
+ if [[ -d "/opt/pyenv" ]]; then
+ echo "Setup pyenv:"
+ export PYENV_ROOT="/opt/pyenv"
+ export PATH="$PYENV_ROOT/bin:$PATH"
+ pyenv versions
+ if command -v pyenv 1>/dev/null 2>&1; then
+ eval "$(pyenv init - --no-rehash)"
+ # shellcheck disable=SC2046
+ pyenv local $(lf-pyver "${python}")
+ fi
+ fi
+
+ # Add version specifier for some packages
+ for arg in "$@"; do
+ case $arg in
+ jenkins-job-builder)
+ pkg_list+="jenkins-job-builder==${JJB_VERSION:-2.8.0} " ;;
+ *) pkg_list+="$arg " ;;
+ esac
+ done
+
+ # Precedence:
+ # - Re-use venv:
+ # 1. --venv-file <path/to/file> as lf_venv
+ # 2. default: "/tmp/.os_lf_venv"
+ # - Create new venv when 1. and 2. is absent
+ if [[ -f "$venv_file" ]]; then
+ lf_venv=$(cat "$venv_file")
+ echo "${FUNCNAME[0]}(): INFO: Reuse venv:$lf_venv from" \
+ "file:$venv_file"
+ elif [[ ! -f "$venv_file" ]]; then
+ if [[ -n "$install_args" ]]; then
+ $python -m venv "$install_args" "$lf_venv" || return 1
+ else
+ $python -m venv "$lf_venv" || return 1
+ fi
+ echo "${FUNCNAME[0]}(): INFO: Creating $python venv at $lf_venv"
+ echo "$lf_venv" > "$venv_file"
+ echo "${FUNCNAME[0]}(): INFO: Save venv in file: $venv_file"
+ fi
+
+ "$lf_venv/bin/python3" -m pip install --upgrade --quiet pip \
+ virtualenv || return 1
+ if [[ -z $pkg_list ]]; then
+ echo "${FUNCNAME[0]}(): WARNING: No packages to install"
+ else
+ echo "${FUNCNAME[0]}(): INFO: Installing: $pkg_list"
+ # $pkg_list is expected to be unquoted
+ # shellcheck disable=SC2086
+ "$lf_venv/bin/python3" -m pip install --upgrade --quiet \
+ --upgrade-strategy eager $pkg_list || return 1