#!/bin/sh
# pypkg.sh
# 2022-12-26
# by Gernot Walzl
# This script uses apt and pip to install Python packages.
# If the requested package is available in an apt repository,
# the package is installed system-wide using apt. Otherwise,
# pip is used to install the package for the user locally.
PYTHON='python3'
set -e
print_usage () {
echo "Usage:"
echo " $0 { pip-install | pip-upgrade | pip-uninstall } PKG"
echo " $0 { pip-list-installed | pip-upgrade-installed }"
echo " $0 { apt-search | apt-install } PKG"
echo " $0 install PKG"
echo " $0 apt-replace-pip-installed"
}
pip_install () {
$PYTHON -m pip install --user "$1"
}
pip_upgrade () {
$PYTHON -m pip install --user --upgrade "$1"
}
pip_uninstall () {
$PYTHON -m pip uninstall "$1"
}
pip_list_installed () {
$PYTHON -m pip list --verbose | grep 'pip$'
}
pip_upgrade_installed () {
PKGS="$(pip_list_installed | cut -d' ' -f1)"
for PKG in $PKGS; do
pip_upgrade "$PKG"
echo ''
done
}
apt_search () {
apt-cache --names-only search "^${PYTHON}-${1}$"
}
apt_install () {
sudo apt-get install "${PYTHON}-${1}"
}
install () {
if [ -n "$( apt_search "$1" )" ]; then
apt_install "$1"
else
pip_install "$1"
fi
}
apt_replace_pip_installed () {
PKGS="$(pip_list_installed | cut -d' ' -f1)"
for PKG in $PKGS; do
if [ -n "$( apt_search "$PKG" )" ]; then
apt_install "$PKG"
pip_uninstall "$PKG"
echo ''
fi
done
pip_upgrade_installed
}
case "$1" in
'pip-install')
pip_install "$2"
;;
'pip-upgrade')
pip_upgrade "$2"
;;
'pip-uninstall')
pip_uninstall "$2"
;;
'pip-list-installed')
pip_list_installed
;;
'pip-upgrade-installed')
pip_upgrade_installed
;;
'apt-search')
apt_search "$2"
;;
'apt-install')
apt_install "$2"
;;
'install')
install "$2"
;;
'apt-replace-pip-installed')
apt_replace_pip_installed
;;
*)
print_usage
esac