Как я могу получить список локально установленных модулей Python? - PullRequest
867 голосов
/ 11 апреля 2009

Я хотел бы получить список модулей Python, которые находятся в моей установке Python (сервер UNIX).

Как получить список модулей Python, установленных на вашем компьютере?

Ответы [ 23 ]

916 голосов
/ 11 апреля 2009
help('modules')

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

557 голосов
/ 27 мая 2014

Решение

Мои 50 центов за получение pip freeze -подобного списка из скрипта Python:

import pip
installed_packages = pip.get_installed_distributions()
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
     for i in installed_packages])
print(installed_packages_list)

Как (слишком длинный) один вкладыш:

sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])

Предоставление:

['behave==1.2.4', 'enum34==1.0', 'flask==0.10.1', 'itsdangerous==0.24', 
 'jinja2==2.7.2', 'jsonschema==2.3.0', 'markupsafe==0.23', 'nose==1.3.3', 
 'parse-type==0.3.4', 'parse==1.6.4', 'prettytable==0.7.2', 'requests==2.3.0',
 'six==1.6.1', 'vioozer-metadata==0.1', 'vioozer-users-server==0.1', 
 'werkzeug==0.9.4']

Область

Это решение применяется к области системы или к области виртуальной среды и охватывает пакеты, установленные с помощью setuptools, pip и ( боже упаси ) easy_install.

Мой вариант использования

Я добавил результат этого вызова на свой флеш-сервер, поэтому, когда я вызываю его с помощью http://example.com/exampleServer/environment, я получаю список пакетов, установленных на сервере virtualenv. Это значительно упрощает отладку.

Предостережения

Я заметил странное поведение этой техники - когда интерпретатор Python вызывается в том же каталоге, что и файл setup.py, он не перечисляет пакет, установленный setup.py.

Шаги для воспроизведения:

Создать виртуальную среду
$ cd /tmp
$ virtualenv test_env
New python executable in test_env/bin/python
Installing setuptools, pip...done.
$ source test_env/bin/activate
(test_env) $ 
Клонировать git-репо с setup.py
(test_env) $ git clone https://github.com/behave/behave.git
Cloning into 'behave'...
remote: Reusing existing pack: 4350, done.
remote: Total 4350 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (4350/4350), 1.85 MiB | 418.00 KiB/s, done.
Resolving deltas: 100% (2388/2388), done.
Checking connectivity... done.

Мы ведем себя setup.py в /tmp/behave:

(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py
Установите пакет python из репозитория git
(test_env) $ cd /tmp/behave && python setup.py install
running install
...
Installed /private/tmp/test_env/lib/python2.7/site-packages/enum34-1.0-py2.7.egg
Finished processing dependencies for behave==1.2.5a1

Если мы запустим вышеупомянутое решение с /tmp

>>> import pip
>>> sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
['behave==1.2.5a1', 'enum34==1.0', 'parse-type==0.3.4', 'parse==1.6.4', 'six==1.6.1']
>>> import os
>>> os.getcwd()
'/private/tmp'

Если мы запустим вышеупомянутое решение с /tmp/behave

>>> import pip
>>> sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
['enum34==1.0', 'parse-type==0.3.4', 'parse==1.6.4', 'six==1.6.1']
>>> import os
>>> os.getcwd()
'/private/tmp/behave'

behave==1.2.5a1 отсутствует во втором примере, поскольку рабочий каталог содержит файл behave setup.py.

Я не смог найти ссылки на этот вопрос в документации. Возможно, я открою для этого ошибку.

256 голосов
/ 16 января 2011

Теперь эти методы я попробовал сам, и я получил именно то, что рекламировалось: все модули.

Увы, на самом деле вас не волнует stdlib, вы знаете, что вы получаете при установке Python.

На самом деле, я хочу установить I .

То, что на самом деле, на удивление, работало просто отлично, было:

pip freeze

Который вернулся:

Fabric==0.9.3
apache-libcloud==0.4.0
bzr==2.3b4
distribute==0.6.14
docutils==0.7
greenlet==0.3.1
ipython==0.10.1
iterpipes==0.4
libxml2-python==2.6.21

Я говорю «удивительно», потому что инструмент для установки пакета - это именно то место, где можно было бы ожидать найти эту функциональность, хотя и не под названием «заморозить», но упаковка из python настолько странна, что я поражен тем, что этот инструмент имеет смысл. Пип 0.8.2, Python 2.7.

80 голосов
/ 08 февраля 2012
  • В ipython вы можете ввести «import Tab ».

  • В стандартном интерпретаторе Python вы можете набрать "help('modules')".

  • В командной строке вы можете использовать pydoc modules.

  • В сценарии вызовите pkgutil.iter_modules().

78 голосов
/ 26 июля 2013

Начиная с версии 1.3, у вас есть доступ к:

pip list

Который кажется синтаксическим сахаром для "замораживания пипса". В нем будут перечислены все модули, относящиеся к вашей установке или virtualenv, а также номера их версий. К сожалению, он не отображает номер текущей версии какого-либо модуля, а также не моет посуду и не блестит.

61 голосов
/ 23 июня 2012

Я просто использую это, чтобы увидеть используемые в настоящее время модули:

import sys as s
s.modules.keys()

, который показывает все модули, работающие на вашем питоне.

Для всех встроенных модулей используйте:

s.modules

Это дикт, содержащий все модули и объекты импорта.

60 голосов
/ 23 августа 2013

В обычной оболочке просто используйте

pydoc modules
25 голосов
/ 25 апреля 2018

Начиная с пункта 10, принятый ответ больше не будет работать. Команда разработчиков удалила доступ к подпрограмме get_installed_distributions. В setuptools есть альтернативная функция для того же. Вот альтернативная версия, которая работает с пип 10:

import pkg_resources
installed_packages = pkg_resources.working_set
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
     for i in installed_packages])
print(installed_packages_list)

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

24 голосов
/ 02 января 2014

Если нам нужно вывести список установленных пакетов в оболочке Python, мы можем использовать команду help следующим образом

>>help('modules package')
18 голосов
/ 06 июля 2018

Я обычно использую pip list, чтобы получить список пакетов (с версией).

Конечно, это работает и в виртуальной среде. Чтобы показать, что установлено только в виртуальной среде (не в глобальных пакетах), используйте pip list --local.

Вот документация , показывающая все доступные опции pip list, с несколькими хорошими примерами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...