#!/bin/bash # Copyright 2017 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # # Starts a python interpreter in virtualenv. # # This script will set up a virtualenv when it has not been created yet and # executes the Python interpreter. # # The canonical version of this script is in infra_virtualenv repository. # See infra_virtualenv/README.md about how to adopt virtualenv to your project. set -eu # Change this constant to the path(s) to infra_virtualenv directory when you # copy this script to other repos. # A path can be a relative path from this script, or an absolute path. If this # array contains multiple paths, they are searched in the listed order. readonly -a infra_virtualenv_paths=( "../../../../../infra_virtualenv" "/opt/infra_virtualenv" ) readonly bin_dir="$(readlink -e -- "$(dirname -- "$0")")" if [[ ! -d "${bin_dir}" ]]; then echo "ERROR: Can not locate the location of python_env!" >&2 exit 1 fi realpath() { pushd "${bin_dir}" > /dev/null 2>&1 readlink -e -- "$1" popd > /dev/null 2>&1 } find_create_venv() { local p for p in "${infra_virtualenv_paths[@]}"; do local create_venv=$(realpath "${p}/bin/create_venv") if [[ -f "${create_venv}" ]]; then echo "${create_venv}" break fi done } readonly create_venv=$(find_create_venv) if [[ ! -f "${create_venv}" ]]; then cat <<EOF >&2 ERROR: create_venv script could not be located. You need to update a constant inside python_venv, or your checkout might be incomplete. EOF exit 1 fi readonly extra_imports_dir=$(realpath ../venv) if [[ ! -d "${extra_imports_dir}" ]]; then cat <<EOF >&2 ERROR: ${bin_dir}/../venv does not exist See infra_virtualenv/README.md for details. EOF exit 1 fi readonly venv_dir=$("${create_venv}" "${extra_imports_dir}/requirements.txt") if [[ ! -d "${venv_dir}" ]]; then echo "ERROR: Failed to set up a virtualenv." >&2 exit 1 fi export PYTHONPATH="${extra_imports_dir}" exec "${venv_dir}/bin/python" "$@"