blob: 9cd1519d54eba2c3d993ec05438e59982ffeb319 [file] [log] [blame]
Brian Silverman6470f442018-08-05 12:08:16 -07001#!/bin/bash
2
3set -e
4set -u
5set -o pipefail
6
7# We disable writing .pyc files here so that the invocation is more
8# deterministic. If we get a corrupted .pyc file (for some reason) in the
9# .runfiles directory the corresponding Python invocation would crash with an
10# EOFError. You can try this by calling truncate(1) on a .pyc file and running
11# your Python script.
12# In the bazel sandbox none of the .pyc files are preserved anyway.
13# Sandboxing also means that Python's entire standard library got cached which
14# normally doesn't happen. That can lead to higher memory usage during the
15# individual build steps.
16export PYTHONDONTWRITEBYTECODE=1
17
18# Find the path that contains the Python runtime. It's not always obvious. For
19# example in a genrule the Python runtime is in the runfiles folder of the
20# tool, not of the genrule.
21# TODO(philipp): Is there a better way to do this?
22BASE_PATH=""
23for path in ${PYTHONPATH//:/ }; do
24 if [[ "$path" == *.runfiles/python_repo ]]; then
25 BASE_PATH="$path"
26 export LD_LIBRARY_PATH="$path"/lib/x86_64-linux-gnu:"$path"/usr/lib:"$path"/usr/lib/x86_64-linux-gnu
27 break
28 fi
29done
30
31if [[ -z "$BASE_PATH" ]]; then
32 echo "Could not find Python base path." >&2
33 echo "More sophisticated logic may be needed." >&2
34 exit 1
35fi
36
37export LD_LIBRARY_PATH="${BASE_PATH}/usr/lib/lapack:${BASE_PATH}/usr/lib/libblas:${BASE_PATH}/usr/lib/x86_64-linux-gnu"
38
Philipp Schrader092a62d2021-12-05 23:15:05 -080039# Prevent Python from importing the host's installed packages.
40exec "$BASE_PATH"/usr/bin/python3 -sS "$@"