75 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/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" "$@"
 |