Как проверить, установлен ли уже модуль или пакет в python3?

Поскольку вы отметили свой вопрос perl , один из способов сделать это в perl будет заключаться в использовании того факта, что perl tr возвращает количество замененных символов; так, например (взяв N = 13 ), вы могли бы сделать

perl -ne 'print unless tr/[0-9]/[0-9]/ > 13' file
ekodeveloper0
wangxiuyan552
jveazey
xoloki
whelee
matthauck
patel3.anirudh
mischa.salle

Возможно, более традиционным способом было бы оценить соответствие регулярного выражения в скалярном контексте, чтобы получить счет

perl -ne '$c = () = /\d/g; print unless $c > 13' file

См., например, Есть ли ярлык Perl для подсчета количества совпадений в строке?

10
21.07.2018, 20:13
8 ответов

Если пакет не делает что-то сумасшедшее или требует много времени при импорте, вы можете попробовать его на самом деле импортировать:

if python -c "import package_name" &> /dev/null; then
    echo 'all good'
else
    echo 'uh oh'
fi
6
27.01.2020, 20:00

Я использовал немного более строгую версию ответа Антона для использования в скрипте:

pip3 list |
    grep -v "^Package *Version$" | grep -v "^-*$" |
    cut -d ' ' -f 1 |
    grep -xF "$package_name"

Первые два grep предназначены для удаления строк заголовка из вывода pip3.

Затем разрез выбирает только имена пакетов (, отбрасывая номера версий ).

Затем финальная команда grep может выполнить точный поиск соответствующих$package_name

Если пакет найден, он отобразит имя пакета и вернется с кодом выхода 0. Если вы не хотите видеть имя пакета, завершите команду>/dev/null

0
27.01.2020, 20:00

Вы также можете использовать что-то подобное в своих скриптах.

python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('$Package') else 1)"

Что вы получите, если пакет не установлен.

Package=psutil
python3 -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('$Package') else 1)"
echo $?
1

Что вы получите после установки пакета.

Package=requests
python3 -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('$Package') else 1)"
echo $?
0

Работает в python2 и python3, а затем вы устанавливаете на основе кода выхода.

1
27.01.2020, 20:00

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

# 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

4
27.01.2020, 20:00

в оболочке/приглашении Python.:

>>> help('modules')
0
27.01.2020, 20:00

Проверено с pip3:

$> pip3 show MODULENAME

Выход -код ($? )будет "0", если модуль установлен, иначе "1".

У Греппинга есть проблема "ложных срабатываний". :Вывод

pip list | grep NAME

будет соответствовать любому модулю, имя которого содержит «ИМЯ», например. также соответствует «какой-то _другой _ИМЯ».

Пока

pip3 show MODULENAME

совпадения только при полных совпадениях.

4
09.04.2020, 10:05

Мне нужно было это внутри моего сценария bash, поэтому в итоге я использовал:

CHECK1=$(<package_name> --version)
CHECK1=$(echo $CHECK1 | awk '{print $1}')
# or: 
CHECK1=$(pip freeze | grep <package_name>)
CHECK1=$(echo $CHECK1 | awk '{print $1}' | awk -F '==' '{print $1}')

Например:

# Check if the virtualenv exists. 
CHECK1=$(virtualenv --version)
CHECK1=$(echo $CHECK1 | awk '{print $1}')

После этого я могу использовать $CHECK1 в операторе if для автоматизации других действий.

if [[ $CHECK1 = 'virtualenv' ]] 
then 
   echo "Yes virtualenv library exists"
else
   echo "No it does not exist... " 
   #.... you can later ask the user to install it or not...

Предположительно, если имя библиотеки не будет изменено, этот сценарий должен работать, чтобы проверять любую библиотеку, существует она или нет.

0
12.05.2021, 13:06

Чтобы расширить ответ Томаса Хофманна, поскольку pip3 showвозвращает ненулевой код выхода для пакетов, которые не установлены, вы можете выполнить то, что хотите, с помощью:

    if pip3 show package_in_question &> /dev/null; then
      run_program
    fi
0
08.10.2021, 01:16

Теги

Похожие вопросы