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

51

В терминале после запуска Python, как я узнаю, какие модули присутствуют в python? Предположим, мне нужно изучить модули NumPy и SciPy.

  • Как я могу установить его, если он не установлен?
  • Как я узнаю, что он уже установлен?
задан TechJhola 22.02.2015 в 04:09
источник

9 ответов

44

Как узнать, установлен или нет модуль python в системе: Вы можете сделать очень простой тест в терминале,

$ python -c "import math"
$ echo $?
0                                # math module exists in system

$ python -c "import numpy"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named numpy
$ echo $?
1                                # numpy module does not exist in system

Как установить его, если он не установлен

Вы можете установить конкретный модуль, загрузив соответствующие пакеты из репозитория, например установить scipy как

sudo apt-get install python-scipy ## for Python2
sudo apt-get install python3-scipy ## for Python3

Альтернативно Вы также можете установить модуль python с помощью python-pip , как было предложено Zack Titan, в ниже. Чтобы установить numpy , вы можете использовать

pip install numpy

Предупреждение: . Настоятельно рекомендуется установить python-модули, используя только официальный репозиторий Ubuntu, и не использовать метод pip как суперпользователь (т. е. как root или используя sudo ). В некоторых случаях это может привести к непригодности вашей системы, нарушив системный питон.

Как установить пакеты с использованием pip в локальную виртуальную среду.     

ответ дан souravc 22.02.2015 в 04:28
источник
16

В случае, если мы не хотим, чтобы нежелательный импорт рассматриваемого модуля (что произойдет в выражении try ), мы можем использовать sys.modules для тестирования модулей, которые установлены и , были импортированные ранее.

В проблеме оболочки python:

>>> import sys

Затем проверьте наличие установленных модулей:

>>> 'numpy' in sys.modules
True
>>> 'scipy' in sys.modules
False

Обратите внимание, что только те модули, которые были импортированы до предоставления True в этом тесте, все остальные модули (даже если они установлены) приводят к False.

Другая альтернатива try an import оператора в консоли python вызывает встроенную функцию help() . Это не даст документации для не установленных модулей, например.

>>> help('scipy')
no Python documentation found for 'scipy'

Вывод очень длинных справочных документов установленных модулей может быть прерван с помощью Q .

Теперь, чтобы установить отсутствующие модули, рекомендуется использовать управление пакетами Ubuntu (а не путь Python), потому что нам нужен root-доступ, а также чтобы предотвратить испортить нашу сильно зависимую от Python систему. Для рассматриваемого модуля это будет, например, быть:

sudo apt-get install python-scipy ## for Python2
sudo apt-get install python3-scipy ## for Python3

После установки мы можем добавить их в словарь sys.modules , импортировав их один раз.

    
ответ дан Takkat 22.02.2015 в 12:23
12

Другим способом является pkgutil . Работает как с Python 2 & amp; 3:

python -c 'import pkgutil; print(1 if pkgutil.find_loader("module") else 0)'

Вам нужно заменить module на имя вашего модуля, например:

$ python -c 'import pkgutil; print(1 if pkgutil.find_loader("math") else 0)'
1
    
ответ дан cuonglm 22.02.2015 в 20:53
8

Вы можете поместить код внутри try , except .

$ python3 -c "\
try:
    import cow  
    print('\nModule was installed')
except ImportError:
    print('\nThere was no such module installed')"

There was no such module installed
$ python3 -c "\
try:
    import regex
    print('\nModule was installed')
except ImportError:
    print('\nThere was no such module installed')"

Module was installed
    
ответ дан Avinash Raj 22.02.2015 в 08:56
7

Я знаю, что OP первоначально запрашивал решение после запуска Python, но за пределами python я использую pip . На ubuntu: sudo apt-get install python-pip , если он еще не установлен.

Затем, чтобы узнать, какие модули сторонних модулей доступны, просто запустите:

pip freeze

Или даже

pip list

И оба будут показывать все установленные модули и их версии.

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

pip install <module-name>

Если вы не знаете, существует ли модуль или его имя PyPI, используйте pip search :

pip search <keyword>
    
ответ дан OozeMeister 23.02.2015 в 03:13
6

Чтобы получить другой ответ, для завершения:

Вы можете (ab) использовать параметр -m . Из man-страницы Python:

   -m module-name
          Searches sys.path for the named module and runs the  correspond‐
          ing .py file as a script.

Что даст нам:

$ python2 -m numpy
/sbin/python2: No module named numpy.__main__; 'numpy' is a package and cannot be directly executed

$ python2 -m math
/sbin/python2: No code object available for math

Но для несуществующих модулей это даст нам:

$ python2 -m doesnt_exist
/sbin/python2: No module named doesnt_exist

Мы могли бы использовать grep для соответствия:

$ python2 -m doesnt_exist |& grep -q 'No module named' && echo 'Nope' || echo 'Yup'
Nope

$ python2 -m math |& grep -q 'No module named' && echo 'Nope' || echo 'Yup'
Yup

Это немного хак-иш, а не то, для чего предназначался -m ; но это метод, который требует наименьшего набора текста, если вы хотите быстрый тест: -)

    
ответ дан Carpetsmoker 22.02.2015 в 20:04
2

Я написал пример в Python:

import pip
import sys
from bigml.api import BigML


if not 'bigml' in sys.modules.keys():
    pip.main(['install', 'bigml'])
    
ответ дан Mona Jalal 21.10.2016 в 21:57
1

Можно также использовать pydoc modules , который можно отфильтровать с помощью grep , чтобы найти конкретный модуль. Вывод отображается в градиентном формате. Единственным недостатком этого подхода является то, что он также будет включать файлы python в текущем рабочем каталоге. Тем не менее, я использую его сам большую часть времени, и это один из сильно цитируемых подходов к этому связанному вопросу: Ссылка     

ответ дан Sergiy Kolodyazhnyy 06.01.2017 в 12:24
1

Проверка оболочки oneliner (полезная для обеспечения)

Я обнаружил, что для обеспечения инициализации моей инфраструктуры ** idempotent мне нужно иметь возможность проверять пакет из оболочки в oneliner. Я построил ответ на @ cuonglm. Мне пришлось отменить 1 и 0 , потому что я создаю статус выхода, а не печатаю строку.

python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader(sys.argv[1]) else 1)" pymongo

Вы можете заменить sys.argv[1] на однозадачное имя вашего пакета, но для моих сценариев инициализации мне нравится читаемость в конце.

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

** Я понимаю, что шеф-повар , марионетка , и anesible все имеют плагины для управления пакетами python, но вы может оказаться в такой ситуации, как я, где вы используете устаревшую версию и не хотите использовать устаревшие плагины.

    
ответ дан Bruno Bronosky 09.03.2017 в 20:25