main
sh 37 lines 1.26 KB
Raw
1 #!/usr/bin/env bash
2 # Provision one bare Python per `requires-python` entry (or per argument) and
3 # print their paths as ":"-separated DEEPGEMM_PYTHON_INTERPRETERS. Skip this
4 # entirely if you already have interpreter paths.
5 #
6 # Usage:
7 # export DEEPGEMM_PYTHON_INTERPRETERS=$(tools/setup_deepgemm_pythons.sh)
8 # python setup.py bdist_wheel --dist-dir=dist --py-limited-api=cp38
9 #
10 # Optional: DEEPGEMM_VENV_PREFIX (default: /tmp/dgenv).
11 set -euo pipefail
12
13 if [ "$#" -eq 0 ]; then
14 # Derive the matrix from `requires-python = ">=3.X,<3.Y"` in pyproject.toml.
15 pyproject="$(dirname "$0")/../pyproject.toml"
16 spec=$(grep -E '^requires-python' "$pyproject" \
17 | grep -oE '>=3\.[0-9]+,<3\.[0-9]+')
18 lo=${spec#>=3.}; lo=${lo%%,*}
19 hi=${spec##*<3.}
20 readarray -t versions < <(seq "$lo" $((hi - 1)) | sed 's/^/3./')
21 set -- "${versions[@]}"
22 fi
23
24 prefix="${DEEPGEMM_VENV_PREFIX:-/tmp/dgenv}"
25 mkdir -p "$prefix"
26
27 paths=""
28 for V in "$@"; do
29 venv="$prefix/$V"
30 # uv-managed Python ensures Python.h is present; system 3.X-dev packages
31 # on the manylinux / Ubuntu build bases are not always installed.
32 [ -x "$venv/bin/python" ] || \
33 uv venv --python "$V" "$venv" --python-preference only-managed --seed \
34 >/dev/null
35 paths="$paths:$venv/bin/python"
36 done
37 echo "${paths#:}"