Установленные библиотеки в Python 3
Небольшое справочное руководство позволяющие ответить на часто возникающий вопрос у новичков, какие установленные библиотеки в Python?
Введение
В процессе обучения программированию на языке Python новички частенько засоряют глобальное окружение языка установкой кучи разных библиотек. Но рано или поздно любопытство берет вверх и хочется посмотреть что там уже установлено. На самом деле задача очень простая и не стоит даже целой статьи, но все таки я часто вижу этот вопрос в телеграм каналах посвещенных Python разработке.
На самом деле существует два способа решения этой задачи, рассмотрим оба.
Способы посмотреть установленные библиотеки
Как я и сказал выше существует два способа проверить установленные библиотеки, рассмотрим их ниже
Используя pip
Самый простой, быстрый и эффективный вариант узнать какие библиотеки установлены в вашем Python выполнить следующую команду
Вывод программы можем быть весьма огромным как в моем случае. Мои установленные библиотеки :
Я очень долго не смотрел что у меня твориться в глобальном окружении, т.к часто пишу приложения для докер-контейнеров.
В глобальном окружении я стараюсь держать несколько библиотек, isort, flake8 и black.
Используя файловую систему
Python всегда устанавливает свои библиотеки в системную папку. Под рукой у меня сейчас есть только macOS и debian Linux, напишу пути для обоих OS
Заключение
Сегодня мы узнали как посмотреть установленные библиотеки в Python двумя разными способами, надеюсь вам понравилось — пишите комментарии.
Пожалуйста, прочитайте другие статьи посвященные языку программирования Python. Помножте свой опыт в программирования с практическими советами от разработчика.
Введение в Python
Поиск
Новое на сайте
Модули в Python
Система модулей позволяет вам логически организовать ваш код на Python. Группирование кода в модули значительно облегчает процесс написания и понимания программы. Говоря простым языком, модуль в Python это просто файл, содержащий код на Python. Каждый модуль в Python может содержать переменные, объявления классов и функций. Кроме того, в модуле может находиться исполняемый код.
Команда import в Python:
Вы можете использовать любой питоновский файл как модуль в другом файле, выполнив в нем команду import. Команда import в Python обладает следующим синтаксисом:
Когда интерпретатор Python встречает команду import, он импортирует (дает доступ) этот модуль, если он присутствует в пути поиска Python. Путь поиска Python это список директорий, в которых интерпретатор производит поиск перед попыткой загрузить модуль. Например, чтобы использовать модуль math следует написать:
Важно знать, что модуль загружается лишь однажды, независимо от того, сколько раз он был импортирован. Это препятствует цикличному выполнению содержимого модуля.
Однако это конструкцию следует использовать с осторожностью, поскольку при импортировании нескольких модулей можно запутаться в своем собственном коде.
Местонахождение модулей в Python:
Когда вы импортируете модуль, интерпретатор Python ищет этот модуль в следующих местах:
Директория, в которой находится файл, в котором вызывается команда импорта
Если модуль не найден, Python ищет в каждой директории, определенной в консольной переменной PYTHONPATH.
Если и там модуль не найден, Python проверяет путь заданный по умолчанию
Путь поиска модулей сохранен в системном модуле sys в переменной path. Переменная sys.path содержит все три вышеописанных места поиска модулей.
Получение списка всех модулей Python установленных на компьютере:
Для того, чтобы получить список всех модулей, установленных на вашем компьютере достаточно выполнить команду:
Через несколько секунд вы получите список всех доступных модулей.
Создание своего модуля в Python:
А во втором вызовем эту функцию:
Выполнив код второго файла получим:
Hello from module_1
Функция dir():
Встроенная функция dir() возвращает отсортированный список строк, содержащих все имена, определенные в модуле.
Архитектура программы на Python:
Код на Python может быть организован следующим образом:
Пакеты модулей в Python:
Отдельные файлы-модули с кодом на Python могут объединяться в пакеты модулей. Пакет это директория (папка), содержащая несколько отдельных файлов-скриптов.
Например, имеем следующую структуру:
В файле inside_file.py определена некая функция foo. Тогда чтобы получить доступ к функции foo, в файле my_file следует выполнить следующий код:
from my_package.inside_file import foo
Так же обратите внимание на наличие внутри директории my_package файла __init__.py. Это может быть пустой файл, который сообщает Python, что данная директория является пакетом модулей. В Python 3.3 и выше включать файл __init__.py в пакет модулей стало необязательно, однако, рекомендуется делать это ради поддержки обратной совместимости.
О порядке поиска пакетов и модулей для импорта в Python
Начать, видимо, следует с того, что речь пойдет об интерпретаторе CPython версии 2.7.x (примеры проверялись на версии 2.7.3).
Алгоритм поиска имен для import abcd
Поиск имени abcd для импорта происходит по следующему алгоритму:
| № | Что ищем | Где ищем* | Комментарий |
|---|---|---|---|
| 1 | пакет abcd | в пакете текущего модуля (модуля, в котором исполняется import abcd) | только, если текущий модуль сам содержится в пакете** |
| 2 | модуль abcd | в пакете текущего модуля (модуля, в котором исполняется import abcd) | только, если текущий модуль сам содержится в пакете** |
| 3 | модуль abcd | во встроенных (built-in) модулях | ссылка на документацию указана в *** |
| 4 | пакет abcd | в каталогах, указанных в sys.path | ссылка на документацию указана в **** |
| 5 | модуль abcd | в каталогах, указанных в sys.path | ссылка на документацию указана в **** |
Дальнейший поиск прекращается в случае успешного поиска пакета на одном из выше перечисленных шагов.
* Информация о приоритете поиска пакета над модулем установленая опытным путем, в документации это явно не указано.
** В этом случае переменная __package__ этого модуля равна названию пакета, иначе она равна None.
Ссылка на документцию:
docs.python.org/2/tutorial/modules.html#intra-package-references
“In fact, such references are so common that the import statement first looks in the containing package before looking in the standard module search path.”
(. ) Здесь стоит заметить отсутствие упоминания данного факта в другом месте того же документа (http://docs.python.org/2/tutorial/modules.html#the-module-search-path), что вводит в заблуждение (см. bugs.python.org/issue16891).
*** docs.python.org/2/tutorial/modules.html#the-module-search-path
“When a module named spam is imported, the interpreter first searches for a built-in module with that name.”
**** docs.python.org/2/tutorial/modules.html#the-module-search-path
“If not found, it then searches for a file named spam.py in a list of directories given by the variable sys.path.”
Алгоритм поиска имен для import abcd.defg
Сначала производится поиск пакета или модуля abcd в соответствии с алгоритмом, описанным для import abcd.
Если поиск успешный, то выполняется поиск пакета или модуля defg в соответствии со следующим алгоритмом:
| № | Что ищем | Где ищем* | Комментарий |
|---|---|---|---|
| 1 | пакет defg | в пакете abcd | ссылка на документацию указана в ** |
| 2 | модуль defg | в пакете abcd | ссылка на документацию указана в ** |
* В случае, если в результате поиска abcd, последний оказался модулем, то импорт закончится ошибкой ImportError: No module named defg, т.к. модуль не может содержать другие модули, либо пакеты:
docs.python.org/2/reference/simple_stmts.html#import: “A package can contain other packages and modules while modules cannot contain other modules or packages.”
** www.python.org/dev/peps/pep-0302/#id23
“Deeper down in the mechanism, a dotted name import is split up by its components. For «import spam.ham», first an «import spam» is done, and only when that succeeds is «ham» imported as a submodule of «spam».”
Алгоритм поиска имен для from abcd.defg import ghi
Сначала производится поиск пакета или модуля abcd.defg в соответствии с алгоритмом, описанным для import abcd.defg:
| № | Что ищем | Где ищем |
|---|---|---|
| 1 | имя ghi | в пакете или модуле defg |
| 2 | пакет ghi | в пакете defg |
| 3 | модуль ghi | в пакете defg |
Перекрытие имен
Хочу отметить одну интересную особенность, которая следует из последовательного применения перечисленных выше алгоритмов. Представьте следующую ситуацию: существует модуль с именем abcd и пакет с именем abcd, содержащий, в свою очередь, модуль defg, модуль abcd и пакет abcd размещены в разных каталогах, при этом модуль abcd размещен в том же пакете, что и модуль, в котором выполняется инструкция import abcd.defg. В этом случае выполнение импорта завершится с ошибкой. Это связано с тем, что интерпретатор Python сначала найдет модуль abcd, потом попытается искать в нем модуль defg, что невозможно.
Разумнее было бы определить из синтаксиса инструкции import, что abcd может быть только пакетом (т.к. все элементы до точки могут являться только пакетами) и искать abcd только как пакет. В этом случае пакет abcd был бы импортирован из другого каталога, а в нем был бы обнаружен модуль defg и выполнение программы продолжилось бы без ошибок.
Как получить список локально установленных модулей Python?
Я хотел бы получить список модулей Python, которые находятся в моей установке Python (сервер UNIX).
Как вы можете получить список модулей Python, установленных на вашем компьютере?
20 ответов
решение
как (слишком длинный) один лайнер:
область
мой прецедент
я добавил результат этого вызова на мой сервер колбы, поэтому, когда я вызываю его с http://example.com/exampleServer/environment Я получаю список пакетов, установленных на virtualenv сервера. Это делает отладку намного проще.
предостережения
воспроизведение:
мы должны вести себя так setup.py на /tmp/behave :
Установите пакет python из репозитория git
если мы запустим вышеупомянутое решение из /tmp
если мы запустим вышеупомянутое решение из /tmp/behave
behave==1.2.5a1 отсутствует во втором примере, потому что рабочий каталог содержит behave ‘ s setup.py файл.
я не смог найти ссылки на эту проблему в документации. Возможно, я открою для него жука.
в оболочке/приглашении Python.
теперь, эти способы я попробовал сам, и я получил именно то, что было объявлено: все модули.
увы, на самом деле вы не очень заботитесь о stdlib, вы знаете, что вы получаете с установкой python.
действительно, я хочу материал, который Я установлен.
что на самом деле, удивительно, сработало просто отлично:
Я говорю «удивительно», потому что инструмент установки пакета является точным место можно было бы ожидать, чтобы найти эту функциональность, хотя и не под названием «заморозить», но упаковка python настолько странная, что я поражен, что этот инструмент имеет смысл. Pip 0.8.2, Python 2.7.
на ipython вы можете типа » import Tab «.
в стандартном интерпретаторе Python вы можете ввести» help(‘modules’) «.
начиная с pip версии 1.3, у вас есть доступ к:
который кажется синтаксическим сахаром для «замораживания pip». В нем будут перечислены все модули, относящиеся к вашей установке или virtualenv, а также их номера версий. К сожалению, он не отображает текущий номер версии любого модуля, а также не моет посуду или чистит обувь.
Я просто использую это, чтобы увидеть используемые в настоящее время модули:
который показывает все модули, работающие на вашем python.
для всех встроенных модулей использование:
который является dict, содержащим все модули и объекты импорта.
в обычной оболочке просто используйте
Если нам нужно перечислить установленные пакеты в оболочке Python, мы можем использовать следующим образом
я столкнулся с пользовательским установленным python 2.7 на OS X. Это потребовало X11 для списка установленных модулей (как с помощью справки, так и с помощью pydoc).
чтобы иметь возможность перечислять все модули без установки X11, я запустил pydoc как http-сервер, т. е.:
тогда можно направить Safari в http://localhost:12345/ для просмотра всех модулей.
очень простой поиск с помощью pkgutil.iter_modules
в windows введите это в cmd
по состоянию на pip 10 принятый ответ больше не будет работать. Команда разработчиков удалила доступ к get_installed_distributions режим. Существует альтернативная функция setuptools за то же самое. Вот альтернативная версия, которая работает с Pip 10:
пожалуйста, дайте мне знать, если это будет или не будет работать в предыдущих версиях pip, тоже.
Помимо использования pip freeze я устанавливал желток в моих виртуальных сред.
для второй цели, пример кода:
это решение является основным на основе модулей importlib и pkgutil и работать с CPython 3.4 и CPython 3.5, но не имеет поддержки CPython 2.
объяснение
использование
для CPython3.4 (усечено)
в случае, если у вас есть распределение Anaconda python установлен, вы также можете использовать
в дополнение к описанным выше решениям.
pip freeze все ли это находит пакеты, однако можно просто написать следующую команду, чтобы перечислить все пути, где находятся пакеты python.
Я обычно использую pip list чтобы получить список пакетов (с версией).
это работает и в виртуальной среде, конечно.
есть много идей, первоначально я размышляю над этими двумя:
помочь («модули»)
минусы: вывод на консоль; со сломанными модулями (см. ubuntu. ) может обработка выхода онлайн / оффлайн
Мне нужен простой подход, используя базовые библиотеки и совместимый со старым python 2.x
в исходном каталоге документации в 2.5 скрыт небольшой скрипт, в котором перечислены все доступные модули для установки Python.
предназначен для работы на Python 1.5.2 и новее
исходный код действительно компактный, поэтому вы можете легко возиться с ним, например, передать список исключений багги-модулей (не попробуйте импортировать их)
из командной строки
Если это не поможет, вы можете сделать это.
Как я могу получить список локально установленных модулей Python?
Я хотел бы получить список модулей Python, которые находятся в моей установке Python (сервер UNIX).
Как вы можете получить список модулей Python, установленных на вашем компьютере?
ОТВЕТЫ
Ответ 1
Решение
Не используйте с pip> 10.0!
Как (слишком длинный) один лайнер:
Объем
Мой вариант использования
Я добавил результат этого вызова на свой флеш-сервер, поэтому, когда я вызываю его с помощью http://example.com/exampleServer/environment я получаю список пакетов, установленных на сервере virtualenv. Это делает отладку намного проще.
Предостережения
Действия по воспроизведению:
Мы ведем себя как setup.py в /tmp/behave :
Установите пакет python из репозитория git
Если мы запустим вышеупомянутое решение из /tmp
Если мы запустим вышеупомянутое решение из /tmp/behave
behave==1.2.5a1 отсутствует из второго примера, потому что рабочий каталог содержит behave setup.py файл.
Я не смог найти ссылки на этот вопрос в документации. Возможно, я открою ошибку для этого.
Ответ 2
в командной строке Python.
Ответ 3
Теперь, эти методы я пробовал самостоятельно, и я получил именно то, что было рекламировано: Все модули.
Увы, действительно вам все равно, о stdlib, вы знаете, что у вас есть с установкой python.
На самом деле, я хочу, чтобы материал, который я установил.
Что на самом деле, на удивление, отлично работало:
Ответ 4
В ipython вы можете ввести » import Tab «.
В стандартном интерпретаторе Python вы можете ввести » help(‘modules’) «.
Ответ 5
Начиная с версии версии 1.3, у вас есть доступ к:
Кажется, что это синтаксический сахар для «замораживания контура». В нем будут перечислены все модули, относящиеся к вашей установке или virtualenv, а также их номера версий. К сожалению, он не отображает текущий номер версии любого модуля и не моет ваши блюда или не блещет вашими ботинками.
Ответ 6
Я просто использую это, чтобы видеть используемые в настоящее время модули:
который показывает все модули, запущенные на вашем питоне.
Для всех встроенных модулей используйте:
Что такое dict, содержащий все модули и объекты импорта.
Ответ 7
В обычной оболочке просто используйте
Ответ 8
Пожалуйста, дайте мне знать, будет ли это работать или не будет работать в предыдущих версиях pip.
Ответ 9
Если нам нужно вывести список установленных пакетов в оболочке Python, мы можем использовать команду help следующим образом
Ответ 10
Ответ 11
Очень простой поиск с использованием pkgutil.iter_modules
Ответ 12
Я столкнулся с пользовательским установленным python 2.7 на OS X. Он потребовал, чтобы X11 отображал установленные модули (как с помощью help, так и pydoc).
Чтобы иметь возможность перечислять все модули без установки X11, я запускал pydoc в качестве http-сервера, то есть:
Ответ 13
в окнах, введите это в cmd
Ответ 14
Это было вдохновлено ответом Адама Матана (принятым):
который затем распечатывает таблицу в виде
Заметка в стороне: я заметил, что когда я устанавливаю пакет один раз с помощью sudo и один раз без него, один имеет приоритет, так что другой не отображается в списке (отображается только одно местоположение). Я считаю, что в списке будет только один из них в локальном каталоге. Это может быть улучшено.
Ответ 15
Ответ 16
Для второй цели, пример кода:
Ответ 17
Это решение основано на модулях importlib и pkgutil и работает с CPython 3.4 и CPython 3.5, но не поддерживает CPython 2.
объяснение
Полный код
использование
Для CPython3.5 (усеченный)
Для CPython3.4 (усечено)
Ответ 18
Если у вас установлен дистрибутив anaconda python, вы также можете использовать
в дополнение к решениям, описанным выше.
Ответ 19
Ответ 20
pip freeze делает все, чтобы найти пакеты, однако можно просто написать следующую команду, чтобы перечислить все пути, в которых находятся пакеты python.
Ответ 21
Есть много способов снять кожу с кошки.
Но для получения дополнительной информации используйте инструмент под названием pip-date, который также сообщит вам даты установки.
pip install pip-date
Ответ 22
Есть много идей, вначале я размышляю над этими двумя:
зернышко
помочь ( «модули»)
минусы: вывод на консоль; со сломанными модулями (см. Ubuntu. ) можно segfault
Мне нужен простой подход, использующий базовые библиотеки и совместимый со старым Python 2.x
В каталоге исходных текстов документации в 2.5 скрыт небольшой скрипт, в котором перечислены все доступные модули для установки на Python.
использует только imp, sys, os, re, time
предназначен для работы на Python 1.5.2 и новее
исходный код действительно компактен, так что вы можете легко переделать его, например, передать список исключений с ошибочными модулями (не пытайтесь импортировать их)
Ответ 23
Мне нужно было найти конкретную версию пакетов, доступных по умолчанию в AWS Lambda. Я сделал это с коллажем идей с этой страницы. Я делюсь этим для потомков.
Я обнаружил, что предоставленная библиотека boto3 устарела, и я не виноват, что мой код не работает. Мне просто нужно было добавить boto3 и botocore в мой проект. Но без этого я бы бился головой, думая, что мой код плохой.
То, что я обнаружил, также отличалось от того, что они официально публикуют. На момент написания этого:
Ответ 24
Если вы используете Python 3
Я только что попробовал на Ubuntu, и, похоже, сработало
Debian/Ubuntu: sudo apt-get install python3-matplotlib
Fedora: sudo dnf install python3-matplotlib
Red Hat: sudo yum install python3-matplotlib
Ответ 25
Для тех, кто интересуется, как вызвать pip list из программы Python, вы можете использовать следующее:







