blob: dd316998ebc67fcdd39cff3382f60f35e2bc10c1 [file] [log] [blame]
# Copyright 2020 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/ 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=(
readonly bin_dir="$(readlink -e -- "$(dirname -- "$0")")"
if [[ ! -d "${bin_dir}" ]]; then
echo "python_venv: Cannot locate python_env!" >&2
exit 1
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_venv3")
if [[ -f "${create_venv}" ]]; then
echo "${create_venv}"
readonly create_venv=$(find_create_venv)
if [[ ! -f "${create_venv}" ]]; then
cat <<EOF >&2
python_venv: create_venv script could not be located
python_venv: Possible causes: python_venv configured incorrectly or
python_venv: incomplete repo checkout
exit 1
readonly extra_imports_dir=$(realpath ../venv)
if [[ ! -d "${extra_imports_dir}" ]]; then
cat <<EOF >&2
python_venv: ${bin_dir}/../venv does not exist
python_venv: See infra_virtualenv/ for details
exit 1
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
export PYTHONPATH="${extra_imports_dir}"
exec "${venv_dir}/bin/python" "$@"