#!/bin/bash python_path="" module_to_import="" pip_package="" function usage { retval="$1" case "$retval" in 0) ;; *) exec 1>&2 ;; esac echo "Usage: $0" echo " --python-path /where/python/lives/python" echo " --module-to-import module_name" echo " --pip-package pip-package-name" echo echo This program installs a package from pypi, but only if module_name echo is not yet importable. echo echo This cuts down on unnecessary sudoing. exit "$retval" } while [ "$#" -ge 2 ] do case "$1" in --python-path) python_path="$2" shift ;; --module-to-import) module_to_import="$2" shift ;; --pip-package) pip_package="$2" shift ;; -h|--help) usage 0 ;; *) echo "$0: Unrecognized option: $1" 1>&2 usage 1 ;; esac shift done case "$python_path" in "") echo --python-path is a required option 1>&2 usage 1 ;; esac case "$module_to_import" in "") echo --module-to-import is a required option 1>&2 usage 1 ;; esac case "$pip_package" in "") echo --pip-package is a required option 1>&2 usage 1 ;; esac if "$python_path" -c "import $module_to_import" > /dev/null 2>&1 then : else "$python_path" -m pip install --break-system-packages "$pip_package" \ || sudo "$python_path" -m pip install --break-system-packages "$pip_package" \ || "$python_path" -m pip install "$pip_package" \ || sudo "$python_path" -m pip install "$pip_package" sudo "$python_path" -m pip install --break-system-packages "$pip_package" || sudo "$python_path" -m pip install "$pip_package" fi