#!/usr/bin/env bash
# This command is specifically for pip-installing a previously
# built wheel.
# Default arguments for all packages installed with `pip install`
# --verbose : Display the output when running setup.py.
# --no-index : Don't look at the package index.
# --disable-pip-version-check : Disables pip's version self-check.
# --isolated : Don't read configuration files such as
# ~/.pydistutils.cfg
# --no-cache-dir : Disable the cache.
# (so that no previously built wheels can sneak in to
# resolve runtime dependencies)
pip_install_flags="--verbose --no-index --find-links=$SAGE_SPKG_WHEELS --disable-pip-version-check --isolated --no-cache-dir"
# Note: "sage-pip-install" is meant to be run after $(PYTHON) has
# been installed (either as an spkg or as a venv over a system python3).
# It is then guaranteed by sage-env that PATH is set in a way that "python3"
# refers to the correct python3.
#
# All SPKGs that use this script must therefore declare $(PYTHON) as a
# dependency.
PYTHON=python3
# The PIP variable is only used to determine the name of the lock file.
PIP=pip3
# We should avoid running pip while installing a package because that
# is prone to race conditions. Therefore, we use a lockfile while
# running pip. This is implemented in the Python script sage-flock
LOCK="$SAGE_VENV/var/lock/$PIP.lock"
# Issue #33155: Pythons installed using the python.org macOS installers
# for Python < 3.10 identify macOS Big Sur and newer as "10.16", causing
# pip to refuse to install wheels tagged macosx_11_0_x86_64
export SYSTEM_VERSION_COMPAT=0
# Finally actually do the installation (the "SHARED" tells pip2/3-lock
# to apply a shared lock)
sage-flock -s $LOCK $PYTHON -m pip install $pip_install_flags "$@"
if [ $? -ne 0 ]; then
# --ignore-installed : Force pip to re-install package even if it thinks it's
# already installed (for which it sometimes gets false
# positives for partially-installed packages).
# --no-deps : Don't install runtime dependencies from PyPI.
extra_pip_install_flags="--no-deps --ignore-installed --ignore-requires-python"
echo >&2 "Warning: installing with \"$PYTHON -m pip install $pip_install_flags\" failed. Retrying, adding \"$extra_pip_install_flags\""
sage-flock -s $LOCK $PYTHON -m pip install $pip_install_flags $extra_pip_install_flags "$@"
if [ $? -ne 0 ]; then
echo >&2 "Error: installing with pip failed"
exit 3
else
echo >&2 "Warning: The installation needed to use \"$extra_pip_install_flags\" to succeed. This means that a dependencies file in build/pkgs/ needs to be updated. Please report this to [email protected], including the build log of this package."
fi
fi