Назад | Перейти на главную страницу

Bash scripting: кроссплатформенная проверка, установлен ли пакет python в системе?

Например, я хочу проверить, доступен ли py-sqlite3 ..? Один из методов - вызвать эту команду с минимальным скриптом Python и отловить ошибку?

Я хочу проверить наличие любого дистрибутива linux и системы unix (по крайней мере, bsd)

Как лучше всего этого добиться?

P.s. Приведите пример отлова ошибок сценария оболочки, потому что я не настолько продвинут в сценариях оболочки

package_exist(){
    package=$1
    if pip freeze | grep $package=; then
        echo "$package found"
    else
        echo "$package not found"
    fi
}

а затем вы можете использовать это так:

package_exist package_name

В bash:

$ python -c 'import sqlite3' 2>/dev/null && echo "python sqlite3 modules install" || echo "python sqlite3 modules not install"
python sqlite3 modules install

$ python -c 'import sqlite3' 2>/dev/null && echo "python sqlite3 modules install" || echo "python sqlite3 modules not install"
python sqlite3 modules not install

Я нашел существующие ответы неполными и в них отсутствуют достаточно хорошие примеры. Вот решение, на котором я остановился:

# an example checking if the pandas package is installed
if python -c 'import pkgutil; exit(not pkgutil.find_loader("pandas"))'; then
    echo 'pandas found'
else
    echo 'pandas not found'
fi

Суть этого примера на Github можно найти здесь: https://gist.github.com/shaypal5/d505af9953cd86f59c750fa600ee4ba6

Это было бы легко сделать с помощью Python.

import sys

try:
    import sqlite3
except ImportError:
    sys.exit(1)
else:
    sys.exit(0)

Выходы с return code 0 если он может его импортировать, или return code 1 если не может.

Андрей