В терминале после запуска Python, как я узнаю, какие модули присутствуют в python? Предположим, мне нужно изучить модули NumPy и SciPy.
- Как я буду устанавливать его, если он не установлен?
- Как я узнаю, установлен ли он уже?
источник
В терминале после запуска Python, как я узнаю, какие модули присутствуют в python? Предположим, мне нужно изучить модули NumPy и SciPy.
Как узнать, установлен ли модуль 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
). В некоторых случаях это может сделать вашу систему непригодной для использования, нарушив системный python.
Как установить пакеты используя pip
в локальной виртуальной среде.
vpython
вам необходимо установить его какsudo apt-get install python-visual libgtkglextmm-x11-1.2-dev
sudo pip
; это может сломать системный питон. Используйте apt-get для установки пакетов для системного Python. Вы можете использоватьpip --user
option или virtualenv для установки пакетов Python для себя.В случае, если мы не хотим нежелательно импортировать соответствующий модуль (что может произойти в
try
выражении), мы можем использовать егоsys.modules
для тестирования модулей, которые были установлены и были импортированы ранее.В выпуске оболочки Python:
Затем проверьте наличие установленных модулей:
Обратите внимание, что только те модули, которые были импортированы прежде, дают
True
в этом тесте, все другие модули (даже если установлены) приводят кFalse.
Другая альтернатива
try
сimport
заявлением в консоли питона называют встроеннуюhelp()
функцию. Это не даст документацию для неустановленных модулей, напримерВывод очень длинных справочных документов установленных модулей может быть прерван Q.
Теперь для установки отсутствующих модулей рекомендуется использовать управление пакетами Ubuntu (а не путь Python), потому что нам нужен root-доступ, а также чтобы не испортить нашу сильно Python-зависимую систему. Для рассматриваемого модуля это будет, например:
После установки мы можем добавить их в
sys.modules
словарь, импортировав их один раз.источник
sys.modules
содержит только модули, которые уже были импортированы , поэтому это не надежный способ проверить, был ли установлен модуль. Самый надежный тест - использоватьtry/except
и перехватыватьImportError
, как уже предлагали несколько других.sys.modules
совершенно не имеет значения , и я думаю , что любое упоминание о нем в заблуждение. Но, возможно, это только я.sys.modules
здесь нет никакой помощиДругим способом является
pkgutil
модуль. Работает с Python 2 и 3:Вам нужно заменить
module
на название вашего модуля, например:источник
print()
также будет хорошо работать в Python 2; Он рассматривается как синтаксис «группа с паренями» и не имеет побочных эффектов. Только когда вы хотите добавить несколько элементов (какprint('a', 'b')
это будет рассматриваться как элементtuple
, в котором вы действительно нуждаетесьfrom __future__ import print_function
, но в данном случае это неприменимо), вы можете просто написать код, совместимый с прямым переходом, добавив символы скобок (я проверил свои изменения в Python 2 и 3)exit
поэтому он может быть использован в контексте оболочки:python -c 'import pkgutil; exit(0 if pkgutil.find_loader("math") else 2)'
Я знаю, что OP изначально запрашивал решение после запуска Python, но я использую его вне Python
pip
. На Ubuntu:,sudo apt-get install python-pip
если он еще не установлен.Затем, чтобы увидеть, какие сторонние модули доступны, просто запустите:
Или даже
И оба покажут вам все установленные модули и их версии.
Если модуль, который вы ищете, не установлен, большую часть времени вы можете легко установить его с помощью pip:
Если вы не уверены, существует ли модуль или как называется его PyPI, используйте
pip search
:источник
pip show <module-name>
покажет, установлен ли пакет, напримерpip show numpy
.Вы можете поместить код внутри
try
,except
блок.источник
Чтобы дать другой ответ, для завершения:
Вы можете (ab) использовать
-m
опцию. С man-страницы Python:Что даст нам:
Но для несуществующих модулей это даст нам:
Мы могли бы использовать,
grep
чтобы соответствовать этому:Это немного хакерство, а не то,
-m
для чего он был предназначен; но это метод, который требует наименьшего набора текста, если вы хотите быстрый тест :-)источник
grep -q
делает перенаправление на нуль ненужным./dev/null
: - /Я написал пример на Python:
источник
Проверка оболочки оболочки (полезно для предоставления)
Я обнаружил, что для того, чтобы сделать инфраструктуру ** идемпотентной, мне нужно иметь возможность проверить пакет из оболочки в oneliner. Я основывался на ответе @ cuonglm. Я должен был повернуть вспять
1
и0
потому, что я создаю состояние выхода, а не печатаю строку.Вы можете заменить его
sys.argv[1]
именем, указанным в кавычках, но для моих сценариев инициализации мне нравится удобство чтения в конце.** Я понимаю, что у chef , puppet и ansible есть плагины для управления пакетами Python, но вы можете оказаться в такой ситуации, как я, когда вы используете устаревшую версию и не хотите использовать устаревшие плагины.
источник
Можно также использовать
pydoc modules
, который может быть отфильтрован,grep
чтобы найти конкретный модуль. Вывод отображается в столбчатом формате. Единственным недостатком этого подхода является то, что он также будет включать файлы Python в текущий рабочий каталог. Тем не менее, я использую его сам большую часть времени, и это один из наиболее цитируемых подходов по этому связанному вопросу: https://stackoverflow.com/q/739993/3701431источник
Из оболочки Ubuntu, по умолчанию bash, так же просто, как
Примеры
И, если у вас есть сомнения по поводу регистра (хотя я думаю, что все имена пакетов всегда строчные):
источник
На момент написания этого,
pip show ...
кажется, самый простой способ: https://pip.pypa.io/en/stable/reference/pip_show/Но он молчит (т.е. ничего не возвращает), когда пакет не установлен.
источник